기본 콘텐츠로 건너뛰기

라벨이 Profiler인 게시물 표시

[최적화] 계산하는데 10분이나 걸려요

동료가 고객사에서 "2~3분 걸리는 작업을 10분 걸린다고 말한다"며 화면에 걸리는 시간을 표시해야겠다고 합니다. 10분은 아니지만 2~3분도 사용자의 인내심을 요구하는 시간이기 때문에 프로그램 최적화를 하기로 했습니다. 아래는 진행중인 프로젝트(Cable AutoRouting) 대상으로 진행한 최적화에 대한 내용입니다. 1. 상황에 맞는 자료 구조를 선택해야 합니다. Map 클래스의 Node 접근이 빈번하게 일어난다고 할때, Nodes 자료 구조로 List를 사용했다고 하면 접근을 위해 아래와 같은 코드가 필요합니다. return map.Nodes.Cast<Node>().Where(c1 => c1.ObjectID == oFeature.ObjectID).FirstOrDefault(); 이때 걸리는 시간은 $O(n)$이 됩니다. 하지만 자료 구조를 Dictionary를 사용한다면 접근하는데 걸리는 시간은 $O(1)$이 됩니다. if(this._Nodes.ContainsKey(oFeature)) { return this._Nodes[oFeature]; }

[펌]Profiler 사용법

Profiler란 - 퍼옴(MadChick) - 비주얼스튜디오에서 제공하는 Application의 performance tuning을 위한 툴중 하나입니다. 가령 프로그램을 졸라 열심히 만들어놨더니 무지하게 느린데 도대체 어디서 이렇게 느려지는지 알수가 없으면 정말 미칠 노릇이죠. 이때 시간을 가장 많이 잡아먹는 함수, 또는 비효율적인 코드부분등을 찝어낼수 있도록 도와주는 놈이 Profiler라는 놈입니다. Profiling은 Function Profiling, Line Profiling 두가지가 있습니다. Line Profiling은 담에 하기로하고, 먼저 Function Profiling 사용법을 알아보겠습니다. 메뉴의 Project/Setting...을 열어 Link tab에 Enable Profiling이라는 체크박스를 체크합니다. 프로젝트를 다시 빌드합니다. Build 메뉴의 맨끝에 있는 Profile...을 선택합니다. 다이얼로그에 보면 Profile Type이 몇가지 나옵니다. 이중에 Function timing을 선택하고 OK를 누르면 실행됩니다. (이때, 실행파일이 있는 폴더에 *.map파일이 반드시 있어야 합니다.) 종료후에 Output창 맨끝 tab에 있는 Profile탭을 열면 결과를 볼수 있습니다. 여기까지는 exe파일의 profiling에만 해당되는 사항입니다. 다음은 dll의 profiling방법입니다. 위 단계의 3번까지는 dll도 똑같습니다. (dll과 exe모두 Enable Profiling상태로 빌드하고, exe가 ActiveProject가 되어있어야 합니다.) 일단 아래와 같은 내용의 profdll.bat파일을 만듭니다. copy %1.dll save prep /OM %1.dll copy %1._ll %1.dll profile /I %1 /O %1 %2 copy save %1.dll prep /M %1 plist %1 comm...