gpt4 book ai didi

c# - 在同一个变量上重复创建新对象

转载 作者:太空狗 更新时间:2023-10-29 18:18:34 25 4
gpt4 key购买 nike

我想这是一个非常愚蠢的问题,但我一直在四处寻找,但找不到以下问题的答案。非常感谢能阐明这一点的答案。

1) 如果在同一方法中实例化一个新对象,前一个对象会发生什么。示例:

DataTable dataTable = new DataTable();
dataTable = new DataTable(); // Will the previously created object be destroyed and memory freed?

2) 与 (1) 相同的问题,但关于静态变量。示例:

static private DataView dataView;

private void RefreshGridView()
{
dataView = new DataView(GetDataTable()); // Will the previously created objects be destroyed and memory freed?
BindGridView();
}

谢谢!

最佳答案

// Will the previously created object be destroyed and memory freed?

有可能。一旦执行此操作,您将不再持有对原始 DataTable 的引用。只要没有其他对象引用该对象,它就有资格进行垃圾回收。在那之后的某个时候,GC 将运行并收集对象,这将释放它的内存。

静态变量、实例变量和局部变量都是如此。在所有这些场景中,机制都是相同的。

请注意,如果您引用的对象实现了 IDisposable,则最好在失去引用之前对其调用 Dispose()。从技术上讲,正确实现的 IDisposable 实现将最终正确处理事情,但 native 资源可能会被占用,直到 GC 收集发生,这可能不会很快发生。请注意,这与(托管)内存无关,但仍然是一种很好的做法。

话虽这么说,你的第一个例子是一个不好的做法。虽然内存(最终)会被清理,但您正在执行毫无用处的额外分配,因此最好不要“双重分配”变量。

关于c# - 在同一个变量上重复创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109392/

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