|
유용한 정보인 것 같습니다..
감사합니다..
어떻게든 메모리를 최소로 사용하는 것이 속도 향상의 방법이겠군요..
유영인 Cuperido 님이 쓰신 글 :
: 많은 메모리를 한번에 힙에 할당했다 하더라도, 당연히 그 메모리중 일부는 하드 디스크에 써진채로 사용을
: 기다리고 있을꺼라 생각됩니다.
:
: 좀 더 빠른 억세스 방법은, 메모리 번지수의 위치를 변화를 최소화 시키는 것이고요. 그리고 뒤에서 읽는지
: 앞에서부터 읽는지도 영향을 미칠 수 있을것 같습니다. (이전에 테스트할때는 뒤에서 읽는게 빨라서 그렇게
: 생각했었는데 다른 어플에서 테스트해보니 꼭 그렇지만도 않은것 같습니다)
:
:
: cuperido
:
: 권기식.별사랑 님이 쓰신 글 :
: : 아, 그렇군요...
: : 그런데 이미 아래의 루틴을 돌기 전에 메모리 할당은 모두 끝내는데도 이런 문제가 생길 수 있을까요?
: :
: : 소스를 천천히 다시 한 번 살펴봐야겠군요..
: :
: : 감사합니다..
: :
: :
: : 유영인 Cuperido 님이 쓰신 글 :
: : : 어떤것을 하는 루틴인지 몰라서 더 빠른 알고리즘을 드리기는 어렵지만,
: : : 처음에 빠르고 나중에 느린것은, 대부분 메모리에 관련된 부분입니다.
: : :
: : : 심지어, 메모미를 많이 사용하게 되면 하드디스크까지 메모리화 해서
: : : 사용을 하니, 당연히 시스템 메모리와 하드 디스크에서 읽는 속도는 당연히
: : : 차이가 나겠지요.
: : :
: : : 처리를 하신 후, 필요없는 메모리를 해제하시고 다시 할당하시는 그런 부분을
: : : 만들어 두신다면, 도움이 되실것 같습니다.
: : :
: : :
: : : 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();
: : : : }
: : : : }
|