gpt4 book ai didi

c# - variable = null as "object destroying"是从哪里来的?

转载 作者:IT王子 更新时间:2023-10-29 04:29:50 25 4
gpt4 key购买 nike

我在许多不同的公司处理用各种版本的 .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 是否有一些我没有察觉到的额外值(value)?

最佳答案

这是FUD cargo cult programming (感谢 Daniel Earwicker )习惯于“释放”资源、糟糕的 GC 实现和糟糕的 API 的开发人员。

一些 GC 不能很好地处理循环引用。要摆脱它们,您必须在“某处”打破循环。在哪里?好吧,如果有疑问,那么无处不在。这样做一年,它就会进入您的指尖。

同时将该字段设置为 null 会让您产生“做某事”的想法,因为作为开发人员,我们总是害怕“忘记某事”。

最后,我们有必须显式关闭的 API,因为没有真正的语言支持说“当我完成它时关闭它”并让计算机像 GC 一样解决它。所以你有一个 API,你必须在其中调用清理代码,而在你不需要的地方调用 API。这很糟糕并鼓励了上述模式。

关于c# - variable = null as "object destroying"是从哪里来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3132258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com