有没有办法收到GC摧毁元件的通知,通知我哪个元件将要释放了。

解决方案 »

  1.   

    放心吧。如果是你的,GC不会乱动的。都是你不要的 GC 才释放。
      

  2.   

    有引用指向的对象都不会被释放。
    当然你主动的调用释放的除外。比如Form的Close时,你是可以决定是否dispose的。当然有点技巧。
      

  3.   

    析构函数只有在GC回收时才调用
    对于需要及时释放的资源应使用IDisposable接口
      

  4.   

    写一个 MyObject 类,添加析构方法,在析构方法里面写通知。
    然后再你的 solution 的所有 object 均派生自 MyObject。若要使用一些现成的无法由MyObject派生的类,则把现成的类作为一个成员包装进去。
      

  5.   

    dispose的时候不一定就是GC回收的时候吧?
      

  6.   


    这是析构,不是 dispose
    而且,请问为什么不是同一时间,莫非一个 dispose 了的对象还能够起死复活;
    要是不是同一个时间,请教啥时候才是呢。ps:求对象析构后起死回生的办法。
      

  7.   

    1、在delphi中,我可以通过System.SetMemoryManager来加上一个自己的Memory管理者,通过其中的FreeMem方法,就可以知道某个元件释放了。
    procedure SetMemoryManager(const MemMgr: TMemoryManager);
      TMemoryManager = record
        GetMem: function(Size: Integer): Pointer;
        FreeMem: function(P: Pointer): Integer;
        ReallocMem: function(P: Pointer; Size: Integer): Pointer;
      end deprecated 'Use TMemoryManagerEx';2、在delphi的VCL.Net中,也有一个Borland.Delphi.System.VCLFreeNotify全局变量可以挂载自己的函数,获得元件释放通知。3、在C#中如何办到,需要method intercept吗?元件是对现有的元件,不是自己写的来源于自己写的同一个祖先。
      

  8.   


    要跳出.NET(当管理者,而不是被托管者)才办得到。
    比如CLR hosting和.net profiler API。