.pdbs是否会降低发布应用程序的速度?

时间:2009-08-13 09:31:35

标签: c# .net performance

如果.dll中包含.pdb(程序调试)文件,则会在所引发的任何异常的堆栈跟踪中显示行号。这会影响应用程序的性能吗?


这个问题不是关于发布与调试,即优化。这是关于拥有.pdb文件的性能影响。每次抛出异常时都会读取.pdb文件吗?加载程序集时,信息是否以某种方式缓存?或者它是在第一次抛出相关异常时缓存的?它有多大区别?

2 个答案:

答案 0 :(得分:14)

John Robbins在他的文章Do PDB Files Affect Performance?中写到了这一点。简单的答案是否定的(如果使用/ optimize +和/ debug开关编译发布版本):

  

在其他操作系统上可能也是如此,但不是Windows。如果您认为他们这样做了,那么为什么Microsoft会为调试和发布版本打开PDB文件来构建他们附带的每个产品?他们编写了编译器,编写了链接器,然后编写了操作系统,以便确切了解效果。与世界上任何其他软件公司相比,微软有更多人专注于性能。如果有任何性能影响,他们就不会这样做。期。性能不是微软唯一的,它就是一切。

此外:

  

当构建/ optimize +和/ debug开关时,DebuggingMode.IgnoreSequencePoints被传递给DebuggableAttribute以告诉JIT编译器它不需要加载PDB文件以便正确地JIT IL。

他还有另一篇题为PDB Files: What Every Developer Must Know的文章也是一本很好的读物。

答案 1 :(得分:6)

不正常。 PDB和优化是正交的。无论其他选项的值如何,都可以启用一个。但是,如果您想要实际使用PDB中包含的信息,可能会降低性能,例如当您访问异常的StackTrace并且需要从PDB获取行号或致电new StackTrace(true)时。

顺便说一句,Eric Lippert有related blog entry about compiler optimizations