2009-08-13 3 views
11

.pdb (프로그램 디버그) 파일이 .dll에 포함되어 있으면 발생하는 예외의 스택 추적에 줄 번호가 나타납니다. 이것은 응용 프로그램의 성능에 영향을 줍니까?.pdbs가 릴리스 응용 프로그램을 느리게합니까?


이 질문은 릴리스 대 디버그, 즉 최적화에 관한 것이 아닙니다. .pdb 파일을 사용하면 성능에 영향을 미치게됩니다. 예외가 throw 될 때마다 .pdb 파일을 읽습니까? 어셈블리가로드 될 때 정보가 어떤 방식으로 캐시됩니까? 또는 관련 예외가 처음 throw 될 때 캐시됩니까? 얼마나 차이가 있습니까?

답변

13

John Robbins는 그의 기사에서 Do PDB Files Affect Performance?에 대해 썼습니다. 간단한 대답은 아니오 (당신이 당신의 릴리스는/최적화 + 및/디버그 스위치를 모두 구축 컴파일하는 경우) :

다른 운영 체제에 사실 수 있습니다

있지만 윈도우. 그렇다면 왜 Microsoft는 디버그 및 릴리스 빌드 모두에 대해 PDB 파일이 제공되는 모든 단일 제품을 빌드합니까? 그들은 컴파일러를 작성하고 링커를 썼으며 운영 체제를 작성하여 효과가 정확히 무엇인지 알고있었습니다. Microsoft는 세계의 다른 소프트웨어 회사보다 성능에 더 많은 사람들이 집중하고 있습니다. 전혀 성능에 영향이 없다면 그렇게하지 않을 것입니다. 기간. Microsoft만의 성능은 아닙니다. 모든 것입니다.

또한 :

/최적화 + 및 A/디버그 스위치를 내장하면 DebuggingMode.IgnoreSequencePoints는에 PDB 파일을로드 할 필요가 없습니다 그 JIT 컴파일러를 이야기하는 DebuggableAttribute를 전달한다 일리노이를 올바르게 맞추기 위해서.

그는 또한 좋은 읽을만한 또 다른 기사 인 PDB Files: What Every Developer Must Know을 가지고 있습니다.

6

정상적으로는 아닙니다. PDB와 최적화는 직각입니다. 다른 옵션의 값에 관계없이 하나를 활성화 할 수 있습니다. 그러나 예외의 StackTrace에 액세스 할 때 PDB에서 줄 번호를 가져 오거나 new StackTrace(true)으로 전화 할 때와 같이 실제로 PDB에 포함 된 정보를 사용하려는 경우 성능이 저하 될 수 있습니다.

그런데 Eric Lippert는 related blog entry about compiler optimizations입니다.

+0

'정상적이지 않다'는게 무엇을 의미합니까? 언제 효과가 있을까요? 또한, 나는 PDB를 가질 수 있고 최적화가 가능하다는 사실이 질문에 어떻게 대답 하는지를 보지 못한다. –

+0

성능에 영향을 미칠 수 있다고 생각되는 특정 사례에 대해 언급했습니다. 스택 추적을 빌드 할 때 정보를 찾아야 할 때입니다. 컴파일러는 PDB가 생성되는지 여부와 상관없이 동일한 IL을 생성 할 수 있으며 JIT 최적화 프로그램은 PDB가 최적화를 수행 할 수 있는지 여부에 상관하지 않습니다. 결과적으로, 생성 된 머신 코드가 동일 할 때, PDB의 존재가 성능을 감소시킬 이유가 없다. –

관련 문제