finalizer

    3热度

    5回答

    我保留一个事务的缓存以在水印或对象最终化事件发生时刷新(持久存储)。由于每个对象上的__del__为no longer guaranteed to be called,因此将类似函数(或__del__本身)挂接到atexit.register(在初始化期间)是否合适? 如果我没有弄错,这个将导致该方法绑定的对象挂起,直到程序终止。这不可能是一个问题,但也许有一个更优雅的解决方案? 注:我知道使用_

    16热度

    6回答

    我知道,最好的做法是调用Dispose实现IDisposable的任何对象,尤其是对象用于包装有限资源,如文件句柄,插座,GDI处理等 但我遇到的情况在那里我有一个具有Font的对象,并且我将不得不通过几层对象来检测IDisposable,并检查很多用法,以确保始终获取Font。我想知道这是否值得复杂。 如果Font包装了HFONT,那将是一回事,因为GDI资源是系统全局的。但是Font不包装GD

    4热度

    6回答

    我有一个名为BackgroundWorker的类,它有一个不断运行的线程。要关闭此线程,名为stop的实例变量需要为true。 为了确保在类完成使用时释放线程,我添加了IDisposable和一个调用Dispose()的终结器。假设stop = true确实会导致此线程退出,则此代码是否正确?从终结器中调用Dispose很好,对吗? 如果object继承IDisposable,终结者应始终致电Di

    2热度

    3回答

    我正在使用一些代码(不是我的,我急于添加,我不太相信这些),它会打开一个套接字,发出请求并侦听响应,这会引发异常当我在xunit中测试时我无法理解。我假设发生同样的异常“活”,但类是由单身人士引用,因此它可能只是隐藏。 该问题在xunit中显示为“System.CannotUnloadAppDomainException:卸载appdomain时出错”,内部异常是在关闭套接字时抛出(基本上)在终结

    7热度

    5回答

    我在.NET中编程了四年(主要是C#),并且我广泛使用了IDiposable,但是我还没有找到需要一个终结器。什么是终结者?

    0热度

    4回答

    我在看一些我刚刚继承的vb.net代码,无法理解为什么最初的开发人员会这样做。 基本上,每个“域”类是属性的集合。每个实现IDisposable.Dispose,并重写Finalize()。没有基类,所以每个只是扩展对象。 Dispose将每个private var设置为Nothing,或者在属性是另一个域对象时调用_private.Dispose。有一个私人变量跟踪处置状态,并且Dispose中

    2热度

    3回答

    我有下面的代码: public class A { ~A() { Console.WriteLine("destructor"); } } public static A Aref; static void Main(string[] args) { Aref = new A(); int

    15热度

    5回答

    如果在完成调用期间保存对当前对象的引用,会发生什么情况?例如: class foo { ... public void finalize() { bar.REFERENCE = this; } } 对象是垃圾收集的,还是不是?当您稍后尝试访问bar.REFERENCE时会发生什么?

    1热度

    1回答

    我正在分析出单元&集成测试,我发现很多时间花在NHibernate.Transaction.AdoTransaction的终结器上 - 这意味着它没有得到妥善处置。 我没有直接在代码中使用AdoTransaction,所以它可能被NHibernate中的一些其他对象使用。任何想法我忘了处置? 这里是我的文字夹具: public abstract class AbstractInMemoryFixt

    6热度

    3回答

    我有出现内存泄漏一个WindowsForms应用程序,所以我用展鹏的蚂蚁内存分析器来看看我怀疑的对象,发现他们是由物体在终结队列只开了。太好了,到底什么是Finalizer Queue?你能指出我的最佳定义吗?你能分享任何轶事建议吗? 此外,Finalizer队列上的所有根GC对象都是实例System.Windows.Forms.Control + ThreadMethodEntry名为“call