在.NET 4.5中,我们已经设置了程序集来为 Release 构建构建调试符号 - 以帮助调试客户站点上的故障转储等。
我的问题是:没有调试器附加并在生产中正常运行是否存在调试符号会导致垃圾收集器的行为不同?
我最近在电子书中阅读了以下内容:
“这些程序集中的每一个都将使用调试符号进行编译,导致性能较差,这意味着GC将无法像在发布版本中那样有效工作。实际上,GC在回收内存方面的积极性较低当包含调试符号时。由于包含调试符号,所以 GC需要准备好可以附加调试器,并且许多用于识别无法访问的引用的规则可能不适用。随附调试器,a 可以访问更多的对象。“
这是真的吗?
答案 0 :(得分:1)
您正在阅读的内容适用于在调试模式下编译的代码,或者在某种程度上适用于附带调试器的代码。调试符号只是在调试模式下编译的副作用,调试符号本身不会改变行为。
垃圾收集器将调试模式中变量的生命周期从变量使用扩展到变量范围。这是基于调试器的存在,而不是存在调试符号。