在我的应用程序中,每隔几秒钟就会创建一个大对象。我对它进行了一些操作,然后不再需要它。
我在任务管理器中看到,即使我没有任何对该对象的引用并且需要对其进行回收,RAM大小也会增加。
实现“IDisposable”之后,RAM立即下降。
为什么会这样?我没有执行“GC.Collect”,我只是释放了对象并告诉GC不需要为我的对象调用终结器。
编辑:
以下是我用于“IDisposable”对象的代码:
在我的大对象中,当我不再需要它时,我会执行
我在任务管理器中看到,即使我没有任何对该对象的引用并且需要对其进行回收,RAM大小也会增加。
实现“IDisposable”之后,RAM立即下降。
为什么会这样?我没有执行“GC.Collect”,我只是释放了对象并告诉GC不需要为我的对象调用终结器。
编辑:
以下是我用于“IDisposable”对象的代码:
public void Dispose()
{
base.Dispose();
Dispose(true);
GC.SuppressFinalize();
}
private void Dispose(bool disposing)
{
//here i release unmanaged resources
if (disposing)
{
//here i release all managed resources
}
}
~MyObject()
{
Dispose(false);
}
在我的大对象中,当我不再需要它时,我会执行
myObject.Dispose();
。我的问题并不是关于如何实现IDisposable
或GC的工作原理。我只想知道当我自己处理对象或让GC完成其工作时,有何区别。
Dispose
方法的实现。仅仅在一个对象上拥有IDisposable
并不能神奇地释放内存,因为CLR和GC对IDisposable
对象没有任何特殊处理。只有Finalizer方法具有特殊意义。 - StevenDispose(bool disposing)
方法的确切代码,还是你实际上在//here i release unmanaged resources
行上有代码? - Steven