|
창조 팁 - '창조' 에 관한 팁을 올리는 곳입니다. 다수의 이미지가 필요하시면 아래 '이미지 자료실' 에 업로드 후 불러와 주세요.. |
| Posted by ps.이진백 | 2004-07-16 22:23:50, Hit : 5924 | |
|
|
|
일부 분들께서 반복문을 비효율적으로 만드시는 듯 해서 올려봅니다.
창조를 하다보면 느끼는것 한가지가 있습니다.
반복문이 (상대적으로) 느린편이라는 겁니다.
그걸 보완하기 위한 여러 기술이 있는데(일부는 창조에서 불가)
그것들을 소개해드릴까 합니다.
1. 시각적 컴포넌트를 직접 수정하지 마세요.
시각적 컴포넌트란 ㅎ리스트박스 등 보이는 컴포넌트를 의미합니다.
반복문 내에서 이것들을 쓰게되면, 매우 느려지게 되죠.
왜냐하면 보여야 할 추가 작업을 해야 하기 때문이죠.
(숨기기 해도 소용없습니다. 무조건 숨어서라도 보이는 작업 합니다)
이럴때는 그냥 ㅎ문자열(ㅎ리스트박스 말고)을 동적 생성하여 씁니다.
2. 예의상 '같이실행해;'를...
같이실행해; = Application.ProcessMessages;
같이실행해 명령어가 프로그램에 내려진 메시지(명령과 반응)를 처리하라는 뜻인겁니다. 이 명령어가 없으면, 반복문이 끝날때까지 프로그램 유지를 안 합니다. 이 때문에 (응답 없음)이 뜨기도 하죠. 반복문이 끝나야 다시 돌아오는 법이거든요.
같이실행해; 를 반복문의 끝에 넣어주세요.
3. 반복문 내 잡다한 코드를 지워라
반복문에 쓸데 없는 코드가 군더더기 있거나, 한번만 수행해도 되는 코드가 있다면 당장 지우세요. 이렇게 하다보면 비효율적이고 느려지게 되는거 말 안해도 아시죠?
(잘못된 예)
되풀이(참) {
진리: 그만;
메모0.내용.전체문자:="너는 즐";
만일(메모0.내용.부분문자(0)="너는 즐") {
그만:=부정 그만; 그쳐; } }
(잘된 예)
진리: 그만;
메모0.내용.전체문자:="너는 즐";
되풀이(참) {
만일(메모0.내용.부분문자(0)="너는 즐") {
그만:=부정 그만; 그쳐; } }
4. while 대신 for 문을...
창조를 제외한 거의 모든 프로그래밍 도구에는 for문이 있습니다.
한번 실행할때마다 특정 정수를 1씩 증가 또는 감소 시키는 방법인데,
이것은 어느 횟수에 맞춰 할 경우 유용합니다.
while이나 repeat보다 훨씬 빠르죠.
델파이에서는 다음과 같은 문법입니다.
var i,j: integer;
begin
for i:=0 to 9 do begin
j:=j+i;
Label1.Caption:=inttostr(j);
end;
end;
//으 지저분해라 -_-;
이 경우는 창조에 적용되지 않아서 하얀 글씨 처리했습니다.
이거 발견하는 분이 있긴 하려나 -_-;
지금까지 살펴보았는데, 괜찮은가요... 너무 어리석은 이야기만 했나...
그럼 어영 숙제 해야지... 아이고 졸려; |
|
|
정성우 2004-07-16 PM 10:51:40 |
|
|
|
4번째 팁을 숨기셨네요? |
|
|
지상현 2004-07-16 PM 10:57:23 |
|
|
|
속도면에서, 같이실행해; 를 넣으면 속도가 심각하게 줄어듭니다...
카운터 변수를 이용해서, 10번에 한번씩 실행하게끔 하는 방법이 추천되고 있습니다. |
|
|
ps.이진백 2004-07-17 AM 7:30:16 |
|
|
|
그래도 장시간 해야하는 반복문은 같이실행해;가 필요할텐데요.
멀티 쓰레드도 불가능한데;; |
|
|
김환욱 2004-07-19 AM 12:04:35 |
|
|
|
저도 같이실행해는 꼭 필요할때만 사용합니다. |
|
|
김정엽[닷넷] 2004-07-20 AM 9:50:35 |
|
|
|
허허..................................
모든것을 다 떠나서 컴퓨터가 반복문을 10000번동안 돈다고 할때의 시간이 얼마나 된다고 같이실행해를 -_-;
1000000정도 돌아야 한 1~2초 되겠죠
저는 600mhz라 그렇지 요즘 나오는최신컴들은 그건 같이실행해 할 필요도 없는..
만약 빠른 속도로 최적화된 프로그래밍을 하려고 하면 창조로 하는 자체가 잘못된게 아닐까요?
창조의 무기는 쉽게 배울수 있다는 점과 그에 따른 생산성인데; |
|
|
ps.이진백 2004-07-20 AM 10:37:11 |
|
|
|
반복문을 쓰는데 가장 좋은 법은 멀티 쓰레드죠.
하지만 창조는 그 대신 같이실행해; 를 쓸 수 밖에 없습니다. |
|
|
최재일 2004-07-21 AM 9:29:55 |
|
|
|
저두 꼭 필요한 경우 아니면 같이실행해; 안씁니다..
반복문 도는 횟수가 많을경우, 그 진행상황을 ㅎ이름표같은데 표시하면 안뜨지만 ㅎ눈금계에 적용시키면 진행상황이 뜨져.. |
|
|
지상현 2004-09-24 PM 7:37:01 |
|
|
|
제 말은...1000번 반복문 돌릴 때, 10번마다 100번 만 같이실행해; 가 되도록 하면 좀 더 빠르고 멈추지도 않는다는 소립니다. |
|
|
최재일 2004-09-25 PM 3:41:09 |
|
|
|
같이실행해 명령어를 너무 남발하면 실행속도가 떨어지니,
상현님 말처럼 해도 유용하겠군요.. ^^ |
|
|
지상현 2005-10-08 AM 10:55:47 |
|
|
|
같이실행해; = Application.ProcessMessages; = DispatchMessage()
한가지 더 추가하자면, 진행률 표시가 있다면, 그 것만 업데이트 하는 부분을 반복문 안에 작성하는 거죠.
같이실행해는 모든 처리를 다 하려 하는데 꼭 필요한 것만 하면 더 빠를 겁니다. |
|
|
지상현 2005-10-08 AM 10:58:37 |
|
|
|
김정엽// 음, 단순히 반복만 하는 거면 문제 없죠. 하지만 그 안에 1~2초씩 걸리는 작업을 만 번 돌리면 어찌되는 겁니까? -.- |
|
|
지우개 Expert 3.0 제작자 : 천호성 님 [LINK] |
|
|
|
대박로또2005 제작자 : 최재일 님 [LINK] |
|
|
1 | 박종훈 님 | 15292 점 | |
2 | 지상현 님 | 8809 점 | |
3 | 손상진 님 | 7388 점 | |
4 | 권선중 님 | 6060 점 | |
5 | 이진백 님 | 5174 점 | |
|
|
|
가입일 | 닉네임 |
05/31 | 김동률 |
03/31 | 홍형기 |
09/01 | o00pp99oo |
12/27 | 이재민 |
11/20 | 이희철 |
|
|
|
|
. |
. |
. |
|