![]() |
1
1
您不应该在生产代码中依赖它,因为无论您的特定测试是否通过,.NET GC都完全按照指定的方式工作。
您创建的内部范围没有反映在CIL代码中,这就是为什么它没有任何区别。另一方面,当局部函数返回时,它的堆栈帧可能会被清理掉(除非其他机制也开始取消这种效果)。
没有剩余任何可访问引用的对象可以进行垃圾收集,但实际收集它们的时间由GC决定。这尤其适用于 objects with finalizers ,在回收之前放入终结队列。
当编译器能够证明对对象的其余引用不会被再次访问时,就会发生这种情况,即使它们在源代码的作用域中。决定这一点的运行时机制无论如何都没有源代码的概念。短暂变量(创建后仅使用一次)是此优化的主要候选者。 但是,如果您正在调试配置下构建和运行程序,那么 the compiler and the runtime will refrain from making the aforementioned optimization ,因为它将通过删除程序处于中断模式时仍可以由您检查的变量值来阻碍调试(这是构建的整个点)。 |
![]() |
Vaccano · 应用程序洞察向导失败 7 年前 |
![]() |
Nele · C++升级到VS2017:关于不明确调用的错误C2668 7 年前 |
![]() |
é³æç¿ · 为什么性能计数器根本不工作 7 年前 |