什么是正确的方式来执行一些静态finallization? 没有静态析构函数。 AppDomain.DomainUnload事件不在默认域中引发。 AppDomain.ProcessExit事件共享所有事件处理程序之间三秒(默认设置)的总时间,所以它不是真的可用。
寻找C#和C ++的答案。 (在C#中,用'finalizer'replace'destructor')
好的,众所周知,当GC将对象标识为垃圾时,它会隐式地调用对象的Finalize方法。 但是,如果我做一个GC.Collect()会发生什么? 终结者仍然执行? 也许是一个愚蠢的问题,但有人问我这个,我回答“是”,然后我想:“ 这是完全正确的吗?
我在程序上运行了一个堆转储。 当我在内存分析工具中打开它时,我发现org.logicalcobwebs.proxool.ProxyStatement的java.lang.ref.Finalizer占用了大量内存。 这是为什么?
我最近和同事讨论了实现IDisposable的Dispose和types的价值。 我认为在实施IDisposable的时候,尽可能快地清理types是有价值的, 即使没有非托pipe资源可以清理 。 我的同事有不同的看法, 如果您没有任何非托pipe资源,则不需要实施IDisposable ,因为您的types最终将被垃圾收集。 我的观点是,如果你有一个ADO.NET连接,你想尽快closures,那么实现IDisposable并using new MyThingWithAConnection()将是有道理的。 我的同事回答说,在封面下,一个ADO.NET连接是一个非托pipe资源 。 我的答复是, 一切最终都是非托pipe资源 。 我知道推荐的一次性模式 ,如果释放托pipe和非托pipe资源,如果Dispose被调用,但是只有通过终结器/析构函数 调用时 才是免费的非托pipe资源 (并且前段时间博客提醒消费者不恰当地使用您的IDisposabletypes ) 所以,我的问题是,如果你有一个不包含非托pipe资源的types,是否值得实现IDisposable ?
C#2008 我已经有一段时间了,对于一些问题我还是感到困惑。 我的问题如下 我知道你只需要一个终结器,如果你正在处理非托pipe资源。 但是,如果您正在使用托pipe资源来调用非托pipe资源,您是否还需要实现终结器? 但是,如果您直接或间接地开发一个不使用任何非托pipe资源的类,是否可以实现IDisposable以便您的类的客户端可以使用“使用语句”? 实施IDisposable只是为了让你的class级的客户可以使用using语句吗? using(myClass objClass = new myClass()) { // Do stuff here } 我已经在下面开发了这个简单的代码来演示Finalize / dispose模式: public class NoGateway : IDisposable { private WebClient wc = null; public NoGateway() { wc = new WebClient(); wc.DownloadStringCompleted += wc_DownloadStringCompleted; } // Start the Async call to find if NoGateway is true or […]