CLR Profiler 还可以揭示哪些方法分配的存储空间超出您的预期,并且可以发现您无意中保留对无用对象图的引用的情况,否则这些对象图可能会被 GC 回收。 (一个常见的问题设计模式是软件缓存或不再需要的项目的查找表,或者以后可以安全地重建。当缓存在其使用寿命结束后使对象图保持活动状态时,这是悲剧性的。相反,确保清空对不再需要的对象的引用.) -- 编写更快的托管代码 http://msdn.microsoft.com/en-us/library/ms973852.aspx
我认为我以前从未真正取消过引用。我认为您并不总是需要这样做,但我想有时记住这样做也很重要。但是,那是什么情况呢?什么时候应该取消引用?
仅当保存引用的变量将保持“活动”状态但您不希望引用本身阻止垃圾收集时,才需要执行此操作。换句话说,如果对象 A 持有对对象 B 的引用,并且您不再需要 B 了,但 A 将由于其他原因而保持活动状态。另一个常见的例子是静态变量,只要 AppDomain 存在,它们就“有效”。
对于局部变量来说是almost永远不需要,因为 GC 可以检测代码中访问变量的最后一个可能的点。但是,如果您在第一次迭代期间使用在循环外部声明的变量,但您知道后续迭代中不需要它,那么您could将其设置为 null 以帮助对象更早地获得 GC 资格。
根据我的经验是very很少发现自己处于这种情况。我几乎不会为了 GC 而故意将变量设置为 null。通常,对象内的所有成员变量都是“有用的”,直到该对象本身符合 GC 条件。如果您发现自己的成员变量aren't对于对象的整个生命周期都很有用,您可能想看看这是否表明设计存在问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)