.pdbs 会减慢发布应用程序的速度吗?

问题描述 投票:0回答:2

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


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

c# .net performance
2个回答
17
投票

John Robbins 在他的文章PDB 文件会影响性能吗? 中对此进行了介绍。简单的答案是否定的(如果您使用 /optimize+ 和 /debug 开关编译发布版本):

在其他操作系统上可能是这样,但在 Windows 上则不然。如果您认为他们这样做,那么为什么 Microsoft 在构建他们发布的每一个产品时都打开了调试和发布版本的 PDB 文件呢?他们编写了编译器,编写了链接器,还编写了操作系统,因此他们确切地知道效果是什么。与世界上任何其他软件公司相比,微软拥有更多关注性能的人员。如果有任何性能影响,他们就不会这样做。时期。在 Microsoft,性能并不是唯一的因素,而是一切。

另外:

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

他还有另一篇文章,题为“PDB 文件:每个开发人员必须知道的内容”,也值得一读。


6
投票
StackTrace

并且需要从 PDB 获取行号或当您调用

new StackTrace(true)
时,它可能会降低性能。

顺便说一下,Eric Lippert 有一篇关于编译器优化的

相关博客文章

© www.soinside.com 2019 - 2024. All rights reserved.