【问题标题】:Is the .NET garbage collector less aggressive on Release build WITH debug symbols?.NET 垃圾收集器在带有调试符号的发布版本上是否不那么激进?
【发布时间】:2013-06-27 15:44:57
【问题描述】:

在 .NET 4.5 中,我们设置了程序集来为 Release 构建构建调试符号 - 以帮助在客户站点上调试故障转储等。

我的问题是:没有调试器附加并在生产中正常运行,调试符号的存在是否会导致垃圾收集器的行为有所不同?

我最近在一本电子书中读到以下内容:

“这些程序集中的每一个都将使用调试符号进行编译,从而导致性能下降,这意味着 GC 将无法像在发布版本中那样有效地工作。本质上,GC 在回收内存方面的积极性会降低当包含调试符号时。由于包含调试符号, GC 需要准备好可以附加调试器,并且许多用于识别不可达引用的规则可能不适用。附加调试器后, 可以访问更多的对象。”

这是真的吗?

【问题讨论】:

  • 请为该电子书命名,这对其他 SO 用户来说很重要,以远离此类废话。

标签: .net garbage-collection debug-symbols


【解决方案1】:

您正在阅读的内容适用于在调试模式下编译的代码,或者在某种程度上,适用于附加调试器运行的代码。拥有调试符号只是在调试模式下编译的副作用,调试符号本身不会改变行为。

垃圾收集器将调试模式下变量的生命周期从变量使用扩展到变量范围。这是基于调试器的存在,而不是调试符号的存在。

【讨论】:

  • 谢谢。我将继续分发这些符号以及发布代码。我只是担心它会影响 GC 性能,即使没有附加调试器。
  • @Gufffa 你有这个信息的官方来源吗?
  • @JimAho:嗯,它是官方和其他来源的结合......官方来源经常让你没有明确的结论,而其他来源往往并不完全正确。一对良好来源的例子:Does garbage collection run during debug?On Garbage Collection, Scope and Object Lifetimes
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多