Tag: suppressfinalize

多次调用SuppressFinalize

是否有多次调用GC.SuppressFinalize(object)缺点? 处置模式的受保护的Dispose(bool)方法检查之前是否调用它,但是在公共Dispose()方法中没有这样的检查。 public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (_Disposed) return; if (disposing) { // Cleanup managed resources. } // Cleanup unmanaged resources. _Disposed = true; } ~MyClass() { Dispose(false); } 可以多次调用MyClass实例的Dispose()方法吗?

C#语言:垃圾收集,SuppressFinalize

我正在阅读“C#语言”,第4版,它讨论垃圾收集如下: “BILL WAGNER:以下规则是C#与其他托管环境之间的重要区别。 在应用程序终止之前,会调用析构函数的所有尚未被垃圾回收的对象,除非已经抑制了这种清理(例如,通过调用库方法GC.SuppressFinalize)。“ 所以我在这里有几个问题: Q1。 为什么.net与其他托管环境不同(我想这是暗示Java?)? 任何特定的设计问题? Q2。 调用GC.SuppressFinalize对象会发生什么? 我明白这意味着GC不会调用这些对象的终结器(析构函数),如果是这样,这些对象什么时候才会被破坏,以便分配的内存位返回堆? 否则会有内存泄漏?

IDispospos GC.SuppressFinalize(this)位置

我为我的代码使用默认的IDisposable实现模板(模式)。 片段: public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool isDisposing) { if (!this.disposed) { if (isDisposing) { //cleanup managed resources } //cleanup unmanaged resources this.disposed = true; } } 我的问题:为什么在Dispose公共方法中调用“GC.SuppressFinalize(this)”? 在处置受管资源之后,我会在受保护方法的“if(isDisposing)”部分中放置“GC.SuppressFinalize(this)”。 像这样: protected virtual void Dispose(bool isDisposing) { if (!this.disposed) { if (isDisposing) { //cleanup managed resources GC.SuppressFinalize(this); } //cleanup unmanaged […]

当我们没有析构函数时,为什么要调用SuppressFinalize

我有几个问题,我无法得到正确的答案。 1)当我们没有析构函数时,为什么我们应该在Dispose函数中调用SuppressFinalize。 2)Dispose和finalize用于在对象被垃圾收集之前释放资源。 无论是托管资源还是非托管资源我们都需要释放它,那么为什么我们需要在dispose函数中使用一个条件,当我们从IDisposable调用这个重写函数时传递’true’:从finalize调用时Dispose并传递false。 请参阅我从网上复制的以下代码。 class Test : IDisposable { private bool isDisposed = false; ~Test() { Dispose(false); } protected void Dispose(bool disposing) { if (disposing) { // Code to dispose the managed resources of the class } // Code to dispose the un-managed resources of the class isDisposed = true; } public void Dispose() […]