기본 콘텐츠로 건너뛰기

라벨이 Optimization인 게시물 표시

[최적화] 계산하는데 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]; }