4

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

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

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

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

这是真的?

4

1 回答 1

1

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

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

于 2013-06-27T16:02:37.370 回答