我为我的代码使用默认的IDisposable实现模板(模式)。片段:publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}protectedvirtualvoidDispose(boolisDisposing){if(!this.disposed){if(isDisposing){//cleanupmanagedresources}//cleanupunmanagedresourcesthis.disposed=true;}}我的问题:为什么在Dispose公共(public)方法中调用“GC.SuppressFina
出于某种原因FXCopseemstothink我应该在Dispose中调用GC.SuppressFinalize,无论我是否有终结器。我错过了什么吗?是否有理由在没有定义终结器的对象上调用GC.SuppressFinalize? 最佳答案 没有必要在Dispose中调用GC.SuppressFinalize(this),除非:您是实现用于重写的虚拟Dispose方法的基类(同样,即使在这里,这也可能不是您的责任,但在那种情况下您可能想要这样做)你自己有一个终结器。从技术上讲,.NET中的每个类都有一个终结器,但如果唯一存在的终结器是
我正在阅读“TheC#Language”,第4版,它讨论垃圾收集如下:"BILLWAGNER:ThefollowingruleisanimportantdifferencebetweenC#andothermanagedenvironments.Priortoanapplication’stermination,destructor'sforallofitsobjectsthathavenotyetbeengarbagecollectedarecalled,unlesssuchcleanuphasbeensuppressed(byacalltothelibrarymethodGC.Su
在.NET中,什么情况下应该使用GC.SuppressFinalize()?使用这种方法给我带来了什么好处? 最佳答案 SuppressFinalize只能由具有终结器的类调用。它通知垃圾收集器(GC)this对象已完全清理。当你有终结器时,推荐的IDisposable模式是:publicclassMyClass:IDisposable{privatebooldisposed=false;protectedvirtualvoidDispose(booldisposing){if(!disposed){if(disposing){//
在.NET中,什么情况下应该使用GC.SuppressFinalize()?使用这种方法给我带来了什么好处? 最佳答案 SuppressFinalize只能由具有终结器的类调用。它通知垃圾收集器(GC)this对象已完全清理。当你有终结器时,推荐的IDisposable模式是:publicclassMyClass:IDisposable{privatebooldisposed=false;protectedvirtualvoidDispose(booldisposing){if(!disposed){if(disposing){//
我刚刚实现了Dispose模式,当我刚刚键入GC.SuppressFinalize(this)行时,我想知道是否有使用以外的东西的用例this作为方法的参数。这是典型的模式:publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);//righthere}用this以外的东西调用GC.SuppressFinalize()是否有意义?publicvoidDispose(){Dispose(true);GC.SuppressFinalize(foo);//shouldthiseverhappen?}
我有几个问题无法得到正确的答案。1)当我们没有析构函数时,为什么要在Dispose函数中调用SuppressFinalize。2)Dispose和finalize用于在对象被垃圾回收之前释放资源。无论它是托管资源还是非托管资源,我们都需要释放它,然后为什么我们需要在dispose函数中设置一个条件,当我们从IDisposable:Dispose调用这个被覆盖的函数时说pass'true'并在从finalize调用时传递false。下面是我从网上复制的代码。classTest:IDisposable{privateboolisDisposed=false;~Test(){Dispose(
我有以下代码:publicvoidDispose(){if(_instance!=null){_instance=null;//CallGC.SupressFinalizetotakethisobjectoffthefinalization//queueandpreventfinalizationcodeforthisobjectfrom//executingasecondtime.GC.SuppressFinalize(this);}}虽然有评论解释了那个与GC相关的调用的目的,但我仍然不明白为什么它在那里。一旦所有实例不复存在,对象是否注定要进行垃圾回收,例如在usingblock