C# 垃圾收集器如何在C中释放内存#
代码如下所示C# 垃圾收集器如何在C中释放内存#,c#,garbage-collection,C#,Garbage Collection,代码如下所示 public class clsMisc : IDisposable { List<clsEmployee> lst = new List<clsEmployee>(); void Add(){ lst.Add(obj); //Adding to it list here } public void Dispose() { lst = null; } } 一旦退出使用范围,就会调用clsMisc中的
public class clsMisc : IDisposable {
List<clsEmployee> lst = new List<clsEmployee>();
void Add(){
lst.Add(obj);
//Adding to it list here
}
public void Dispose()
{
lst = null;
}
}
一旦退出使用范围,就会调用clsMisc中的dispose方法,并在该方法中调用dispose方法
我们分配了null
存储在内存中的值(列表中clsEmployee的现有记录)是否将被释放,它将分配新值,还是将创建列表的新实例并分配空值
因为我是新手,所以我无法理解这种行为
有人能在这方面指导我吗?你根本不必担心它,因为收集器相当聪明,而且因为它是一种托管语言,你真的应该让它去做 收集器将决定何时需要进行清理,因此无法保证何时进行清理
但是如果你死心塌地地想要强制收集,你可以调用1。你不需要将
lst
设置为null
。2.你的问题是什么?using语句完成后,对象是否得到GC?或者不同?设置为null后,将立即发生什么?不会立即发生任何事情。但如果这恰好是您设置为null的实例的唯一引用。这意味着不再有对该对象的托管引用,它有资格进行垃圾收集。垃圾收集触发时,GC将对其进行收集。@SriramSakthivel感谢您的回复。我明白了。因此,在上述场景中使用IDisposable可能不会给我带来什么好处,对吧?IDisposable和using
块与内存无关。它们与资源利用率有关。如果类正在处理其他对象,基本上不用担心在C#中进行处理。您只想在类拥有本机资源时使用IDisposable。@RichardSchneider不仅如此。如果您的类具有实现IDisposable
的任何字段,则必须实现IDisposable
您好,谢谢您的回复。。我明白了。
Using( clsMisc obj = new clsMisc()){
//Here goes the code
}