刚刚从c++转移过来,看到了C#中有个GC(拉圾回收器)可以自动回收拉圾的,好像这个东西自己有很好的回收拉圾内存的策略,不用自己再在析构函数中显示的写回收拉圾的code了,虽然系统也提供了System.GC.Collect()方法来显示要回收内存,但是微软又不提倡用它,说要影响GC的性能。这个意思是不是C#程序员再也不用考虑内存拉圾问题了?(当然非内存的资源还是要显示的释放:)

解决方案 »

  1.   

    基本上是的,因为CLR会隔一段时间检测一下内存,如果发现某些资源没在使用状态,就调用GC来释放,Java也是这种机制。
      

  2.   

    差不多了~只要有了CLR,利用GC回收,MS今天在.net frameword programming又看了一边
      

  3.   

    一般大对象用完后就手工释放,小对象就让CLR自动处理吧。
      

  4.   

    建议你不用,.net有专门的线程在不断的检测和做回收工作。当然你可以分析一下其使用的回收机制,看是否满足你的要求。再补充一些方法也可以。另外.net底层上是否不会发生内存泄漏还不好说。连JAVA有回收机制,其JVM都有这方面漏洞。
      

  5.   

    非托管资源,继承IDisposable接口,显示调用Dispose方法释放资源,效率应该比较高
      

  6.   

    有 Dispose 的类尽量调用 Dispose 就好了
    反正 ms 这里根本就是不明不白
    我们的服务器(2003)经常出现占用好多内存的情况,就算定时调用 Collect 也不太解决问题,后来多加了几个处理进程好多了
      

  7.   

    GC好有必要,我写了个多线程的东东,内存种是隔一段时间就爆长,后来在多处加了GC就使内存维持在一个稳定的水平了,不过cpu就出现了波浪型的变化.但总算解决了问题.另外,有很多对象如果是可以设置null的或可以dispose的就尽量把他们设置了,null的会被gc收回而dispose就不用说了.
      

  8.   

    to: superfishmanweb
    我现在也遇上你同样的问题.请问为啥要"在多处加了GC"?这样做有啥好处,怎么加?每个线程执行完都加呢?环是定时调用呢?望指教!
      

  9.   

    特殊情况下需要考虑,在资源占用很大的时候也会考虑WeakReference什么的
      

  10.   

    实现了IDispose的对象是必须调用Dispose方法,托管资源可以不管,非托管资源一定要写Dispose和析构函数释放,否则永远不会释放
      

  11.   

    我手动家gc.collect()和dispose(),
    但是,内存都不会少,
    即使用了上面的方法,还是要等gc来回收?
    这个地方就是不明不白,用好还是不用好?
    用多线程可以解决吗?
      

  12.   

    在非拖管代碼中﹐應該在調用后顯式回收好一點的(個人認為)。
    比如說你在C#中調用Excel之類的COM,在調用完后﹐應該Null然后GC.Collect()好一點的。否則Excel的進程是要等到窗體關閉后才能關閉甚至更長時間才能關閉的。
      

  13.   

    前面new了一个没有实现IDispose的对象,要如何在后面手动释放内存?
      

  14.   

    .net说实话俺也搞了好长时间了,现在还是不明不白,俺只是觉得占用资源比较大(想当然)的时候才收工释放。
    俺的观点是“虽然办公室里有大姐定时打扫垃圾,如果碰上垃圾太多的时候,也要主动叫她去打扫”。