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

Mat*_*lls 12 .net c# performance

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


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

adr*_*nks 14

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

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

另外:

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

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


Meh*_*ari 6

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

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