C# PDB是否会降低发布应用程序的速度?

C# PDB是否会降低发布应用程序的速度?,c#,.net,performance,C#,.net,Performance,如果.dll中包含.pdb(程序调试)文件,则引发的任何异常的堆栈跟踪中都会显示行号。这会影响应用程序的性能吗 这个问题不是关于发布与调试,即优化。它是关于拥有.pdb文件对性能的影响。是否每次抛出异常时都读取.pdb文件?加载程序集时是否以某种方式缓存信息?还是在第一次抛出相关异常时将其缓存?它有多大的区别?通常不是。PDB和优化是正交的。无论其他选项的值如何,都可以启用其中一个选项。但是,如果您希望实际使用PDB中包含的信息,例如在访问异常的StackTrace时,它需要从PDB获取行号,

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



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

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


顺便说一句,埃里克·利珀特有一个。

约翰·罗宾斯在他的文章中写到了这一点。简单的答案是否定的(如果使用/optimize+和/debug开关编译发布版本):

在其他操作系统上可能是这样,但在Windows上不是这样。如果你认为他们会这样做,那么为什么微软会为调试版和发布版构建打开PDB文件来构建他们发布的每一个产品呢?他们编写了编译器,他们编写了链接器,他们编写了操作系统,所以他们确切地知道效果是什么。微软比世界上任何其他软件公司都有更多的人关注性能。如果对性能有任何影响,他们不会这么做。时期在微软,性能不是唯一的东西,而是一切

此外:

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


他还有另一篇文章,题为《那也是一本好书》。

你说的“不正常”是什么意思?什么时候会有效果?此外,我也不明白一个人可以同时拥有PDB和启用优化这一事实如何回答这个问题。我提到了一个我认为可能会影响性能的具体案例:当你在构建堆栈跟踪时需要从中查找信息时。无论是否生成PDB,编译器都可以生成相同的IL,JIT优化器也不关心PDB是否存在以启用其优化。因此,当生成的机器代码相同时,没有理由认为PDB的存在会降低性能。