2009-08-13 43 views
11

如果.pdd(程序調試)文件包含在.dll中,那麼行號將出現在引發的任何異常的堆棧跟蹤中。這會影響應用程序的性能嗎?.pdbs會減慢發佈應用程序的速度嗎?


這個問題不是關於發佈與調試,即優化。它涉及具有.pdb文件的性能影響。每次拋出異常時都會讀取.pdb文件?組裝程序加載時是否以某種方式緩存信息?還是第一次拋出相關異常時緩存?它有多少差異?

回答

13

約翰羅賓斯在他的文章Do PDB Files Affect Performance?中寫道了這件事。簡單的答案是否定的(如果使用/ optimize +和/ debug開關編譯您的發行版本):

在其他操作系統上可能是這樣,但不是Windows。如果你認爲他們這樣做了,那麼爲什麼微軟爲構建調試和發佈版本而打開PDB文件的每個產品?他們編寫了編譯器,編寫了鏈接器,並編寫了操作系統,以便他們確切知道影響。與世界上任何其他軟件公司相比,微軟更注重性能。如果有任何性能影響,他們不會這樣做。期。性能不是微軟唯一的事情,它就是一切。

此外:

當內置/優化+和/調試開關,DebuggingMode.IgnoreSequencePoints傳遞給DebuggableAttribute告訴JIT編譯器,它並不需要加載PDB文件爲了正確的JIT IL。

他還有另一篇名爲PDB Files: What Every Developer Must Know的文章,這也是一個很好的閱讀。

6

不正常。 PDB和優化是正交的。無論其他選項的值如何,都可以啓用。但是,如果要實際使用PDB中包含的信息,例如訪問StackTrace的例外情況,並且需要從PDB獲取行號或撥打new StackTrace(true)時,它可能會降低性能。

順便說一句,Eric Lippert有一個related blog entry about compiler optimizations

+0

你是什麼意思'不正常'?它何時起作用?另外,我沒有看到一個人可以擁有PDB並啓用優化的事實如何回答這個問題。 – 2009-08-13 09:47:24

+0

我提到了具體的情況,我認爲它可能會影響性能:當您在構建堆棧跟蹤時需要從中查找信息時。無論是否生成PDB,編譯器都可以生成相同的IL,並且JIT優化器也不關心PDB是否存在以啓用其優化。因此,當生成的機器碼相同時,沒有理由存在PDB會降低性能。 – 2009-08-13 09:57:16

相關問題