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

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


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

John Robbins在他的文章“PDB文件是否会影响性能?”中写到这一点? 。 简单的答案是否定的(如果使用/ optimize +和/ debug开关编译发布版本):

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

另外:

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

他还有另一篇题为PDB文件的文章:每个开发者必须知道的内容也是一本很好的读物。

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

顺便说一句,Eric Lippert有一篇关于编译器优化的相关博客文章 。