“破坏对象”的variable = null从何而来?

2024-04-18

在许多不同的公司中,我在使用各种 .NET 版本编写的许多遗留系统上工作,不断发现以下模式的示例:

public void FooBar()
{
    object foo = null;
    object bar = null;

    try
    {
       foo = new object();
       bar = new object();

       // Code which throws exception.
    }
    finally
    {
       // Destroying objects
       foo = null;
       bar = null;
    }

}

对于任何了解 .NET 内存管理工作原理的人来说,这种代码是完全没有必要的。垃圾收集器不需要你手动分配null告诉旧对象可以被收集,也不能分配null指示 GC 立即收集该对象。

这种模式只是噪音,让我们更难理解代码想要实现的目标。

那么,为什么我总是发现这种模式呢?有没有学校教这个练习?有没有一种语言可以用来赋值null需要局部范围变量的值才能正确管理内存吗?显式分配是否有一些额外的价值null我还没有意识到吗?


It's FUDcargo cult programming http://en.wikipedia.org/wiki/Cargo_cult_programming (thanks to Daniel Earwicker https://stackoverflow.com/users/27423/daniel-earwicker) by developers who are used to "free" resources, bad GC implementations and bad API.

一些 GC 不能很好地处理循环引用。为了摆脱它们,你必须在“某个地方”打破循环。在哪里?好吧,如果有疑问,那就无处不在。这样做一年,它就会转移到你的指尖。

还将该字段设置为null给你“做某事”的想法,因为作为开发人员,我们总是担心“忘记某事”。

最后,我们有必须显式关闭的 API,因为没有真正的语言支持说“当我完成它时关闭它”并让计算机像 GC 一样弄清楚它。因此,您有一个必须调用清理代码的 API,以及不需要调用清理代码的 API。这很糟糕并且鼓励了上面这样的模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“破坏对象”的variable = null从何而来? 的相关文章

随机推荐