【问题标题】:Do .pdbs slow down a release application?.pdbs 会减慢发布应用程序的速度吗?
【发布时间】:2009-08-13 09:31:34
【问题描述】:

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


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

【问题讨论】:

    标签: c# .net performance


    【解决方案1】:

    John Robbins 在他的文章Do PDB Files Affect Performance? 中写到了这一点。简单的答案是否定的(如果您使用 /optimize+ 和 /debug 开关编译发布版本):

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

    另外:

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

    他还有一篇题为PDB Files: What Every Developer Must Know的文章也不错。

    【讨论】:

      【解决方案2】:

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

      顺便说一句,Eric Lippert 有一个related blog entry about compiler optimizations

      【讨论】:

      • “不正常”是什么意思?什么时候会有效果?此外,我看不出一个人可以同时拥有 PDB 并启用优化这一事实如何回答这个问题。
      • 我提到了我认为可能会影响性能的具体情况:当您需要在构建堆栈跟踪时从中查找信息时。无论是否生成 PDB,编译器都可以生成相同的 IL,并且 JIT 优化器也不关心 PDB 是否存在以启用其优化。因此,当生成的机器代码相同时,没有理由存在 PDB 会降低性能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多