如果 .dll 中包含 .pdb(程序调试)文件,则行号会出现在引发的任何异常的堆栈跟踪中。这会影响应用程序的性能吗?
这个问题与发布与调试(即优化)无关。这是关于拥有 .pdb 文件的性能影响。每次抛出异常时都会读取 .pdb 文件吗?加载程序集时是否以某种方式缓存信息?或者是在第一次抛出相关异常时缓存?有多大区别?
John Robbins 在他的文章PDB 文件会影响性能吗? 中对此进行了介绍。简单的答案是否定的(如果您使用 /optimize+ 和 /debug 开关编译发布版本):
在其他操作系统上可能是这样,但在 Windows 上则不然。如果您认为他们这样做,那么为什么 Microsoft 在构建他们发布的每一个产品时都打开了调试和发布版本的 PDB 文件呢?他们编写了编译器,编写了链接器,还编写了操作系统,因此他们确切地知道效果是什么。与世界上任何其他软件公司相比,微软拥有更多关注性能的人员。如果有任何性能影响,他们就不会这样做。时期。在 Microsoft,性能并不是唯一的因素,而是一切。
另外:
构建 /optimize+ 和 /debug 开关时,会将 DebuggingMode.IgnoreSequencePoints 传递给 DebuggableAttribute 以告诉 JIT 编译器不需要加载 PDB 文件即可正确 JIT IL。