finalizer

    1热度

    1回答

    我有一个控制器类,在操作过程中,它使用它执行的执行器来执行任务。如果我只是让gc在超出范围时清理控制器,那么JVM似乎不会死亡。我假设这是因为默认的执行程序不会超时,或者在很长一段时间后超时。 鉴于在控制器仍然可以访问的情况下执行器不应该被关闭,并且在控制器被垃圾收集之后执行器不会被使用,是否可以安全/可接受地使用终结器来使用: @Override public void finalize() {

    1热度

    1回答

    假设我需要清理终结器中的一些托管资源,或者至少以线程安全的方式将其记录在需要清理的地方。根据我的理解,锁定终结者是严格禁止的,但Interlocked类怎么样?这是否安全,是否会导致僵局? static int deadentries; ~Item() { Interlocked.Increment(ref deadentries); } public static T Get(int id,

    2热度

    1回答

    最近我们发现我们的一个服务器应用程序(所以它是windows服务)因OutOfMemory异常而失败。我们试图找出发生了什么事情,并且最终确定队列中的对象并未最终确定,因此不会发生垃圾回收。我们试图找出,哪个终结器可以通过使用Windbg导致这种行为,但我们无法找出究竟是哪个对象导致它。 使用finalizequeue命令,我们可以发现这一点:! 0:053> !finalizequ

    4热度

    2回答

    C++/CLI定义的类当我实现在C++/CLI DLL的类: public ref class DummyClass { protected: !DummyClass() { // some dummy code: std::cout << "hello" << std::endl; } } ,当我加载DLL到C#项目和通过重复地只使

    1热度

    2回答

    我有一个C#对象,它是resposible一个的ressource它看起来像这样: public sealed class CLoadingScope { private bool isDisposed; public CLoadingScope() {} ~CLoadingScope() { // must be dis

    1热度

    1回答

    我们遇到了WCF的问题,这让我们花了很长时间来诊断,所以我在这里发布它们以防有人遇到类似问题(没有在其他地方找到引用)。 我们的流程往往会与下面的未处理的异常崩溃: System.NullReferenceException: Object reference not set to an instance of an object. at System.ServiceModel.Channels

    9热度

    2回答

    考虑下面的代码: using System; namespace memoryEater { internal class Program { private static void Main(string[] args) { Console.WriteLine("alloc 1"); var big1 = new Bi

    1热度

    2回答

    我学习Ruby和还没有找到一种方法来覆盖等效object.delete功能的缺失运行方式: 这是怎么了,我这样做: class Foo @@no_foo=0 def initialize @@no_foo+=1 end def delete #class specific cleanup... @@no_fo

    3热度

    4回答

    要学习C#native interop,我一直在研究OpenGL封装。 OpenGL API本身是一个绑定到特定线程的状态机。当包含本地资源的对象被垃圾收集时,终结器正在GC线程中运行,并且不能直接释放资源。 我现在的解决方法是在上下文对象中有一个列表,这些对象将它们的资源添加到绘图循环中的一个安全点并将其释放并释放它们。 但是,这个问题的问题是,如果GC正在迭代整个列表时收集,那么foreach

    0热度

    1回答

    我们刚刚开始使用穆勒一个月前,迄今为止这是一个很好的学习。目前,我们已经实施了很多流程来集成我们不同的系统。对我们来说,其中一个要求是在每个流程结束时执行一些清理代码。更像是一个终结构造。 我正在寻找一种通用的方法,我可以遵循我们所有的流程。 注 - 如果我添加了一个步骤(我可以执行清理代码)到流程结束 - 不保证该步骤将在所有先前步骤完成后执行(如这些步骤在不同的线程上运行;我们不想在一个同步线