现在有一个项目 设置的是每隔一分钟就手动执行一次GC垃圾回收(放在子线程中执行),我觉得有点时间间隔短了,如果有必要的话,隔多长时间 手动执行一次GC垃圾回收合适呢????
另外 我想问问 GC执行垃圾回收,会额外的消耗(耗费)资源(没存)吗???
求解答,希望大家各抒己见,不予吝啬.....
谢谢 大家的回复和建议. 内存资源

解决方案 »

  1.   

    呵呵  GC.Collect 每次调用都会挂起所有工作线程 然后内存碎片整理 托管资源释放 而且频繁调用是消耗CPU的
      

  2.   

    并且频繁显示的调用对CPU占用更多,内存消耗更大,本身.net GC已经是优化了的,是一个非常复杂的过程,一旦发生调用就会去依次遍历3代内存根,然后对未有引用的内存块标记,然后调用终结器,最后将有引用的内存块提升一代。
      

  3.   

    如果没有十足的理由不应该去调用GC.Collect 。
    更不应该重复调用。
      

  4.   

    调用 GC.Collect 并不意味着一定立刻执行垃圾回收。
      

  5.   

    且不谈GC耗费资源 不能马上回收
    如果你注意垃圾回收
    在写代码的时候去注意及时Dispose对象,释放不要的资源
    这比去统一某个时间去集中调GC回收更好
      

  6.   


    可是 现在 就我们这个组在做 NET,别的组 是永别的语言写程序的.......现在 我 就是 抽空就优化下代码,把冗余的代码 可以提取为字段的局部变量 整理出来,我觉得不能 所有的都交给 编译器去优化,虽然都是 大牛们的设计结果, 不过 我觉得 设计的时候 肯定 是选择的 折中 的 优化方式了
      

  7.   

    但是频繁绘图,没使用GC,虽然有写dispose,但是内存还是会飚上去,要等很久才会降下来!看那些内存浪费,实在是看不下去!
      

  8.   

    有自己的类需要Dispose么,另外有用到非托管资源了没?
    另外确定Dispose都及时调了吗?
    实在不行就要看代码了,这绘图具体是用了哪些东西。
      

  9.   

    代码可以优化class className : IDisposable //类名可以使用IDisposable 接口
    {
            SqlClient sc = new SqlClient();//需要释放的全局变量        public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (disposing)
                    if (sc != null)
                        sc.Dispose();//释放
            }
            ~className()
            {
                Dispose(false);
            }}也可以使用Using
      

  10.   


    GDI+ ,不停的定义局部变量Pen Brush,还有 自己定义的类,我现在 修改的是 需要 定义局部变量的 再用外后都 = null了,不需要定义为局部变量的提取成 字段了,不过对于 自定义的类,没有 自己 实现 Dispose,不知道这样 有没有效果
      

  11.   


    USing,我倒是忘了这个了......
      

  12.   

    Pen、 Brush等对象(如果是这些造成内存消耗)有没有办法重复使用一下,而不要每次都重新创建(至少缓存一下)。
      

  13.   

    合理使用using语句和dispose比主动调用gc.collect好。
      

  14.   


    是的,现在 我抽空再给 以前 封装好的 类 增加 Dispose方法呢,在 使用结束后 都显示的调用Dispose