当前位置:  开发笔记 > 编程语言 > 正文

循环和垃圾收集

如何解决《循环和垃圾收集》经验,为你挑选了2个好方法。

我正在处理Web应用程序,我遇到了以下情况.

Dim a as Object
Dim i as Integer = 0

Try

    For i=1 to 5

        a = new Object()

        'Do stuff '

        a = Nothing

    Next

Catch

Finally

   a = Nothing

End Try

我是否需要在循环中执行a = Nothing或将垃圾收集器清理干净?



1> John Rudy..:

在.NET中,通常不需要设置变量reference = Nothing(null在C#中).垃圾收集器最终会清理干净.当它超出范围时(或者当你的方法退出时或者当这个类的对象被完成时),它将被销毁.请注意,这并不意味着对象被销毁,只是对它的引用.该对象仍将被收集器非确定性地销毁.

但是,设置您的reference = Nothing将提示.NET该对象可能是垃圾,并且不一定会伤害任何东西 - 除了代码混乱.如果你要把它放在那里,我建议把它从Try块中取出; 它已经在Finally块中,因此将始终被调用.(除了某些灾难性的例外;但在这些情况下,它也不会在Try块中被调用!)

最后,我必须承认我同意格雷格:没有这个,你的代码会更清晰.使用引用完成运行时的提示很好,但肯定不是关键.老实说,如果我在代码审查中看到这一点,我可能会让开发人员重写它:

Dim a as Object
Dim i as Integer = 0

For i=1 to 5
    a = new Object()
    'Do stuff
Next


实际上将变量设置为null可能会导致对象的生命周期延长而不是缩短(http://blogs.msdn.com/csharpfaq/archive/2004/03/26/97229.aspx).虽然帖子的一般信息是正确的 - 不要打扰设置为null.

2> Greg Hewgill..:

几乎没有必要明确地将Nothing赋值给变量.垃圾收集器的工作是为您处理内存分配,特别是为了减轻您的责任.所以不,你不需要a = Nothing在循环内部分配.

你也不需要try/finally在整个事情中分配Nothing 的块.这实际上只是运行时系统将要处理的额外混乱.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有