|
어떤것을 하는 루틴인지 몰라서 더 빠른 알고리즘을 드리기는 어렵지만,
처음에 빠르고 나중에 느린것은, 대부분 메모리에 관련된 부분입니다.
심지어, 메모미를 많이 사용하게 되면 하드디스크까지 메모리화 해서
사용을 하니, 당연히 시스템 메모리와 하드 디스크에서 읽는 속도는 당연히
차이가 나겠지요.
처리를 하신 후, 필요없는 메모리를 해제하시고 다시 할당하시는 그런 부분을
만들어 두신다면, 도움이 되실것 같습니다.
cuperido
권기식.별사랑 님이 쓰신 글 :
: 이전부터 가지고 있던 문제이자 의문이었는데요..
: 아래와 같은 루틴이 있습니다.
: 이 루틴을 적게는 백만번에서 수백만번, 천만번까지 돌게 되는데요..
: 초반에는 좀 빠르게 돌아갑니다... (프로그레스 바로 진행 상태를 출력합니다.)
: 점점 프로그레스 바 올라가는 속도가 느려집니다.
: 50% 정도 돌리고 나면 처음 속도의 50% 아래로 떨어지기 시작하더군요..
:
: 무슨 문제일까요?
: 루프 안에 또 루프, 비교... 이런 것들 때문일까요?
:
: 이것보다 좀더 빠른 알고리즘을 찾아야 할텐데... 머리가 안굴러가는군요.. 쩝
:
: if(TopLight) {
: for(int i = 0; i < cnt_x && !bStop; i++) {
: if(Px->InitializeX(socketX, lampDiameter, lampPosition)) {
: while(Px->GetIntensity() > 0.001) {
: Px->NextPoint();
: if(!Px->UpperBound()) {
: if(Px->Correction())
: Brightness->Catch(Px->GetPosition(), Px->GetIntensity());
: break;
: }
: else {
: if(Px->Correction())
: Px->Scatter();
: else
: break;
: }
: }
: }
: ProgressBar->StepBy(1);
: StatusBar->Panels->Items[0]->Text = IntToStr((i+1) * 100 / cnt) + "%";
: IdleLoop();
: }
: }
|