c#内存分配和释放模式

Nea*_*eal 8 .net c# memory-leaks memory-management

由于C#使用垃圾收集.什么时候需要使用.Dispose释放内存?

我意识到有一些情况所以我会尝试列出我能想到的.

  1. 如果我关闭包含GUI类型对象的表单,那些对象是否已取消引用,因此将被收集?
  2. 如果我使用new创建一个本地对象,我应该在方法退出之前暂停它还是让GC处理它?在这种情况下,有什么好的做法?
  3. 是否有任何时候迫使GC可以理解?
  4. GC收集对象时是否收集事件?

Ree*_*sey 10

从理论上讲,如果你已经正确定义的组件部分,它不应该需要调用Dispose()在你的对象,终结应该最终会照顾它.

话虽这么说,每当你使用一个实现IDisposable的对象时,一旦你使用它就调用Dispose()是一个好习惯.

对于您的一些具体要点:

1)如果您知道表单已"完成",则可以在其上调用Dispose().这将强制在与表单关联的非托管资源的那个时间点进行清理.

2)在这种情况下:如果您的对象只是在该方法中使用,请使用"using"代替:

using (MyObject myObject = new MyObject())
{
   // use your object
} // It'll be disposed of here for you
Run Code Online (Sandbox Code Playgroud)

3)有很少的理由这样做,但总的来说,没有.

4)事件是委托 - 在委托本身变为无根之后将收集与委托相关联的存储器,这通常在有问题的对象未经根据时发生.


归档时间:

查看次数:

7254 次

最近记录:

15 年,6 月 前