RT
刚换工作,转来C#不久,做了个程序,持续的在分析数据。
任务管理器里 看到 程序在内存涨到300多M的内存的时候,内存会下降到200多M,然后再涨到300多M后 再降到200多M,周而复始...上司(不是专业做程序的,多少知道点东西吧),问我 内存使用能不能降降。他问我 为什么 涨100多M的时候 会回收,为什么回收了 100多M而不是200多M。
我一下子蒙了,就只说了 动态分配内存 回收得看GC 具体无法确定回收的时间和大小 之类的...
他说了一些 要对内存有足够的把握,不能任由GC去搞  之类的话...
于是来问问大家:GC回收内存的 时机 和 大小 是怎么确定的?能不能自己配置?任何讲解、资料、文章、链接 都欢迎,先谢谢大家了 !!

解决方案 »

  1.   

    那你手动 Dispose或者析构函数。
      

  2.   

    你要对内存有足够的掌控,用C++啊,都自己控制。或者开启一个线程,监听进程使用情况,超过一个阀值比如250M,强制GC.Conlect()
      

  3.   

    没啥用,垃圾回收机制不是那么浅显使用代码就好使的.你可以这样试验.一个集合变量一直add 到几万几十万.然后你在给他赋值null或者clear  你看内存有变化吗.或者你手动GC,看看效果就知道了.
      

  4.   

    主要是 这个 申请释放内存 比较频繁,我个人认为,频繁的申请释放内存  又要弄个内存池了,还不如直接 让GC帮我管理比较方便......
    本来GC的出现,
    就是为了让程序员不用关心内存的释放问题
      

  5.   

    垃圾回收有自己的判断机制在里面,想自己手动去配置,是不太现实的。
    给你推荐一本书先看看吧。
    《CLR via C#(第4版)》 第21章 托管堆和垃圾回收 有很详细的描述。
      

  6.   

    主要是 这个 申请释放内存 比较频繁,我个人认为,频繁的申请释放内存  又要弄个内存池了,还不如直接 让GC帮我管理比较方便......
    本来GC的出现,
    就是为了让程序员不用关心内存的释放问题
    本来就是啊,哎 我等底层员工 伺候主子不易啊
      

  7.   

    可以调用GC.Collect()强制回收
    不过绝大部分情况,没必要手动这么做 300M内存占用不是什么大不了的