finalizer

    9热度

    1回答

    声明:我知道IDisposable应该在处理非托管资源时执行。其余的代码应该是确定性的,并且做using (...) { }(相当于try {} finally { Dispose(); })以保证尽快清理。此外,GC将not call Dispose(),所以推荐的模式是覆盖Finalize()方法(在C#中使用析构函数语法),然后调用Dispose()。 GC通常会调用Finalize()(除

    0热度

    1回答

    ,当我得到一个InvalidComObjectException后,我结束我的应用程序下面的一段代码: class MyExcelManager { myExelAppInstance = new Excel.Application(); // finalizer ~MyExcelManager() { myExelAppInstance.Qu

    6热度

    1回答

    所以这里是迄今为止的故事,我有这个工作者使用AppDomain来执行一些任务。该域名安装和拆卸很昂贵。所以,我创建了一个高速缓存每个线程的WeakReference对象工人的啄像这样: class Worker { [ThreadStatic] static Dictionary<string, WeakReference> _workers; public st

    8热度

    2回答

    当我在C#中阅读一些关于内存管理的文章时,我对Finalizer方法感到困惑。 有这么多复杂的规则与他们有关。 例如,没有人知道什么时候终结器会被调用,即使在ctor抛出代码时它们也会调用,CLR不能保证在程序关闭时调用所有终结器等。 对于什么终结器可以用于实际生活? 我发现的唯一例子是当GC启动时发出哔哔声的程序。 您是否在代码中使用Finalizers并可能有一些好的示例? UPD: 可以终结

    6热度

    1回答

    我一直在阅读关于Java终结器的these slides。其中,作者描述了一个场景(幻灯片33),其中CleanResource.finalize()可以由终结器线程运行,而CleanResource.doSomething()仍然在另一个线程上运行。这怎么会发生? 如果doSomething()是一个非静态方法,那么执行该方法的某人,某处必须有一个强烈的参考它...对吗?那么在方法返回之前如何清

    1热度

    3回答

    我在读“Joshua Bloch的有效Java编程,我建议不要使用”finalize“块,因为它不能保证被执行,任何人都可以解释一下,或者给出一个一些文章的链接,解释对此进行了详细

    3热度

    2回答

    见从MSDN代码示例:(http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=VS.100).aspx) // Design pattern for a base class. public class Base: IDisposable { private bool disposed = false; //Implemen

    6热度

    5回答

    在Java中,finalize在对象(即覆盖它)时被调用,当它将要被垃圾回收时,所以当它无法访问时。但是如果终结器使对象再次可达,那么会发生什么?

    16热度

    2回答

    终结器是否保证在某些时候在.NET中执行(备用停电等)?我知道GC是如何工作的,而且它确切的运行时它是不确定的。 (该搜索没有显示出良好的答案,所以我将这个问题与高度期望的合并与不容易发现的实际答案进行了合并,除此之外,我已经知道答案如果没有人提及它,我会在几天后添加它。)

    2热度

    3回答

    我忙于对非确定性破坏感到困惑。在对另一个question的回答中,我得到了一个建议,即析构函数/ finalisers(我认为它与c#中的函数相同,即称为〜classname()的函数)非常昂贵且不是必需的。但看着this的例子,使用了一个析构函数,从评论听起来这可能是至关重要的。任何人都得到了一些有关这一切如何适应在一起的建议,我应该从我的代码中删除析构函数? 再次感谢。