或者获得垃圾回收的信息?

解决方案 »

  1.   

    GC.Collect(垃圾代数);//可以手动控制垃圾回收
    GC.KeepAlive(object);//可以保证此变量不被垃圾回收
      

  2.   

    Your .Net program is under the control of CLR. To manage garbage collection, write a C++ program that hosts the CLR, then you have control over the CLR via ICLRGCManager, IHostGCManager etc.
      

  3.   

    To 1 楼 and 5楼垃圾回收用到的系统内部的数据结构可以访问并操作么?如果可以怎么做呢?
      

  4.   

    .NET的托管堆应该是一张图,可能是用邻接表存储的。但是你读不到里面的内容的。首先.NET允许你不让某个变量被回收——通过GC.KeppAlive(object),这个是手工创建一个引用。
    其次.net允许你对某个垃圾代数进行强行回收……GC.Collect(代数)。.NET的垃圾回收不允许你去碰他内置的托管堆。
    因为.NET的内存垃圾分为3代,每代的垃圾大小是不同的。比如你分配一个4字节的int型就放到1代,而如果有个超级大的结构体比如100K,那么会放入3代。你创建的结构不知道会被放在哪个托管堆中,所以就算让你碰也很难定位这张表。最后一点就是.NET每次回收都会对旧的变量压缩,并且提升代数。一次回收带来的性能损失是很大的,而且一个变量所处的代数位置也会变化的。楼主真要手工控制回收还是用C++吧……
      

  5.   

    To walkingmu:可以告诉我这些信息你是从哪里了解到的么?我想看看这些文档,也许可以找到新的思路,谢谢
      

  6.   

    CLR 控制着垃圾回收,就像windows着控制着内存读写一样,
    表面上可以对内存读写,就像直接访问内存一样,
    但其实windows接管了内存的操作。
    一样的道理