![]() |
1
12
对局部变量这样做没有好处。CLR通过JIT确切地知道局部变量何时不再在方法中使用,因此是可收集的。 Raymond Chen最近在博客上发表了一篇非常深入的文章,讨论了什么时候可以收藏物品。它详细介绍了这个场景,值得一读
|
![]() |
2
4
不,事实上,在某些情况下,“空化”局部变量可以防止垃圾收集。在正常操作中,一旦变量不再可以从任何正在执行的代码中访问,它就可以用于垃圾回收。如果在方法的末尾,您“清空”了变量,那么您会将它保持为“活动”状态,直到那一刻,并且实际上会延迟它对垃圾回收的可用性。 |
![]() |
3
2
|
![]() |
4
2
我写道 a long and exhaustive blog article answering this question .
|
![]() |
5
2
如果类有终结器,任何非空的对象引用字段都会导致引用的对象被保留的时间比其他情况下长。如果在finalizer运行之前就知道对象是不必要的,那么清除对象引用字段将允许对象比其他情况下更快地被收集一代。这可能是一个巨大的胜利。 如果一个对象的生存期(有用或不有用)预计要比它有引用的对象的有效生存期长,那么不必要地保留引用将阻止后一个对象被收集,直到前一个对象被收集为止(即引用将强制后一个对象被保留,即使它已经变得无用)。清除引用将避免该问题。
|
![]() |
6
1
|
![]() |
7
0
有一个很重要的情况是空值会产生影响,那就是当您使用一个调试构建时,某些jit优化被关闭。当对象被清理时,许多更有趣的行为可以停止,以使调试更容易。 这一点很重要,因为它可能会导致错误地理解发布版本中正在发生的事情。 |
![]() |
8
0
过早优化 (对许多人来说是万恶之源),所以除非你真的需要记忆,否则你不应该这么做。
但我说过 序贯法 例如,因为mono的GC与.NET的GC不同)。 释放 模式和启动 (so CTRL-F5)并观察结果:
结果是:
但是记住这些话 过早优化 和 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |