在 .NET 4.5 中,我们已经设置了我们的程序集来为 构建调试符号。发布 构建 - 帮助调试客户站点上的故障转储等。
我的问题是:没有调试器 附加并在生产中正常运行是否存在调试符号会导致垃圾收集器的行为不同?
我最近在一本电子书中读到以下内容:
“这些程序集中的每一个都将使用调试符号进行编译,从而导致性能下降,这意味着 GC 不会像在发布版本中那样有效地工作。本质上,当包含调试符号时,GC 在回收内存方面的积极性将降低。由于包含调试符号,因此
GC 需要准备好可以附加调试器,并且许多用于识别不可达引用的规则可能不适用。连接调试器后,
可能可以到达更多的对象。”
这是真的?
最佳答案
您正在阅读的内容适用于在 Debug模式下编译的代码,或者在某种程度上适用于附加了调试器的代码。具有调试符号只是在 Debug模式下编译的副作用,调试符号本身不会改变行为。
垃圾收集器将 Debug模式下变量的生命周期从变量使用扩展到变量作用域。这是基于调试器的存在,而不是调试符号的存在。
关于.net - .NET 垃圾收集器在使用调试符号发布版本时是否不那么激进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347566/