32位windows 2003 server,web服务器为IIS 6。
服务器上有几个网站,独立使用自己的pool,每个app pool的最大内存使用限制为800M,超过这个数目就回收pool池的资源。我的网站,有几个地方比较好资源,会发生因为超过内存限制而回收,重启。所以写了个判断,及时强制回收,请问这个值多大好呢,540 million, 600 million,还是多少?肯定不是800M,因为这时已经超过限制了。if (GC.GetTotalMemory(false) > 540,000,000)
{
    GC.Collect(1, GCCollectionMode.Forced);
}

解决方案 »

  1.   

    最好的方法是不要调用GC.Collect...优化代码才是正道...
      

  2.   

    强制调用GC.Collect... 
    说不定会有意外呢
    建议还是优化代码
      

  3.   

    优化不太容易啊。都是生成几百页的pdf和xls。
      

  4.   

    楼主这是典型的:头痛医脚"我的网站,有几个地方比较好资源,会发生因为超过内存限制而回收,重启。"这个才是问题的关键.耗资源会超过单进程1.7G?(除非是大型3D游戏没有优化好的时候才可能,
    一般Web应用,写这种代码就是直接送网站进坟墓... ...另外,建议不要随便手动去回收GC.
      

  5.   

    如其它人所建议的那样,尽量不要调用GC.Collect
    频繁调用GC.Collect会导致100% CPU,而真正的请求就无法响应至于你所谓的耗资源,只要用完之后立即释放(var = null),那么当内存不够用的时候,CLR会自动帮你回收内存的.前面你所谓的回收Apppool,建议你不要设置800M(还不知道你这个800是指虚拟内存还是物理内存呢),如果是物理内存,800M确实是一个合适的值,但是根本解决办法是找到你内存泄露的代码段,进行改进
      

  6.   

    要是必须用到垃圾回收的话 就这样吧。GC.Collect(0);
    GC.WaitForPendingFinalizers();一起用
      

  7.   

    GC也要占内存的
    也要占CPU的,
    还是要从根本上解决问题,优化代码
      

  8.   

    生成pdf这部分,没办法优化.
    还是强制GC吧.
      

  9.   

    能说下为什么不能优化了?
    你把几百页的PDF同时生成保存到内存中,肯定内存不足.
    能不能考虑一部分的处理,一部分的写入呢?
      

  10.   

    及时释放对象,优化代码
    如 using
      

  11.   

    不管了,反正就有4个不常用的地方调用。
    已定为400,000,000
    if (GC.GetTotalMemory(false) > 400000000)
    {
         GC.Collect(0, GCCollectionMode.Forced);
    }
      

  12.   

    为啥GC.Collect(0, GCCollectionMode.Forced)没用。
    直接GC.Collect()反而内存下降很多。