请问每隔一分钟手动执行一次GC,合适吗??

猴头 2013-03-15 09:35:55
现在有一个项目 设置的是每隔一分钟就手动执行一次GC垃圾回收(放在子线程中执行),我觉得有点时间间隔短了,如果有必要的话,隔多长时间 手动执行一次GC垃圾回收合适呢????


另外 我想问问 GC执行垃圾回收,会额外的消耗(耗费)资源(没存)吗???


求解答,希望大家各抒己见,不予吝啬.....


谢谢 大家的回复和建议.

...全文
1111 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
青松2 2013-03-22
  • 打赏
  • 举报
回复
quanben 2013-03-22
  • 打赏
  • 举报
回复
Pen、 Brush等对象(如果是这些造成内存消耗)有没有办法重复使用一下,而不要每次都重新创建(至少缓存一下)。
猴头 2013-03-22
  • 打赏
  • 举报
回复
引用 31 楼 AisaC 的回复:
合理使用using语句和dispose比主动调用gc.collect好。
是的,现在 我抽空再给 以前 封装好的 类 增加 Dispose方法呢,在 使用结束后 都显示的调用Dispose
神马都能聊 2013-03-22
  • 打赏
  • 举报
回复
合理使用using语句和dispose比主动调用gc.collect好。
成双成对 2013-03-22
  • 打赏
  • 举报
回复
学习了,谢谢楼主。
猴头 2013-03-22
  • 打赏
  • 举报
回复
引用 27 楼 quanben 的回复:
Pen、 Brush等对象(如果是这些造成内存消耗)有没有办法重复使用一下,而不要每次都重新创建(至少缓存一下)。
我在 类中 声明成为了 字段,只初始化 一次 ,以后每次 使用时,重新设置 属性
猴头 2013-03-18
  • 打赏
  • 举报
回复
失败啊 失败~~~~~~~~~~~~~~~ 我重新 提取 局部变量后 内存消耗 却更高了,多了 15M的内存使用量...... 真伤心
猴头 2013-03-18
  • 打赏
  • 举报
回复
引用 23 楼 kansousama 的回复:
代码可以优化 C# code?123456789101112131415161718192021class className : IDisposable //类名可以使用IDisposable 接口{ SqlClient sc = new SqlClient();//需要释放的全局变量 public void Dispose() ……
USing,我倒是忘了这个了......
猴头 2013-03-18
  • 打赏
  • 举报
回复
引用 21 楼 quanben 的回复:
有自己的类需要Dispose么,另外有用到非托管资源了没? 另外确定Dispose都及时调了吗? 实在不行就要看代码了,这绘图具体是用了哪些东西。
GDI+ ,不停的定义局部变量Pen Brush,还有 自己定义的类,我现在 修改的是 需要 定义局部变量的 再用外后都 = null了,不需要定义为局部变量的提取成 字段了,不过对于 自定义的类,没有 自己 实现 Dispose,不知道这样 有没有效果
叫我三三 2013-03-18
  • 打赏
  • 举报
回复
代码可以优化

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
quanben 2013-03-18
  • 打赏
  • 举报
回复
有自己的类需要Dispose么,另外有用到非托管资源了没? 另外确定Dispose都及时调了吗? 实在不行就要看代码了,这绘图具体是用了哪些东西。
小红帽A_A 2013-03-17
  • 打赏
  • 举报
回复
但是频繁绘图,没使用GC,虽然有写dispose,但是内存还是会飚上去,要等很久才会降下来!看那些内存浪费,实在是看不下去!
足球中国 2013-03-17
  • 打赏
  • 举报
回复
优化内存使用不能靠gc。靠的还是自己。 这个需要一些经验。说起来容易做起来难的活。
activatesoso 2013-03-17
  • 打赏
  • 举报
回复
学习了,谢谢楼主。
猴头 2013-03-17
  • 打赏
  • 举报
回复
引用 17 楼 zanfeng 的回复:
优化内存使用不能靠gc。靠的还是自己。 这个需要一些经验。说起来容易做起来难的活。
那就要在平时写代码的时候养成 好习惯啦。
猴头 2013-03-16
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
引用 4 楼 yan_hyz 的回复:.......这么复杂啊,那我还是劝组长 取消 每隔一分钟 手动 执行GC的过程了...... 别人不干正经事,你也没有必要提醒他。只参与他干的正经事,当他把时间消磨在画蛇添足的地方时,你应该考虑自己做点正经事或者换一个组。
可是 现在 就我们这个组在做 NET,别的组 是永别的语言写程序的....... 现在 我 就是 抽空就优化下代码,把冗余的代码 可以提取为字段的局部变量 整理出来,我觉得不能 所有的都交给 编译器去优化,虽然都是 大牛们的设计结果, 不过 我觉得 设计的时候 肯定 是选择的 折中 的 优化方式了
phommy 2013-03-16
  • 打赏
  • 举报
回复
去服务器上看一下性能计数器,比如你手动回收的是0代的,就看每秒发生了多少次0代的回收。如果你调用的频率远少于这个值(比如你提到的1分钟1次)是没有意义的;这样确定出一个大致的手动回收频率,再看你注重哪些参数来做微调
  • 打赏
  • 举报
回复
引用 4 楼 yan_hyz 的回复:
.......这么复杂啊,那我还是劝组长 取消 每隔一分钟 手动 执行GC的过程了......
别人不干正经事,你也没有必要提醒他。只参与他干的正经事,当他把时间消磨在画蛇添足的地方时,你应该考虑自己做点正经事或者换一个组。
猴头 2013-03-16
  • 打赏
  • 举报
回复
引用 6 楼 dongxinxi 的回复:
这样用的比较少,实在要用,也是用其他几个重载的方法收一下0代或者设置为优化模式
周一 我去 看看 有哪几种 重载, 另外 优化模式 怎么设置呢??
猴头 2013-03-16
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
调用 GC.Collect 并不意味着一定立刻执行垃圾回收。
引用 8 楼 m_obj 的回复:
且不谈GC耗费资源 不能马上回收 如果你注意垃圾回收 在写代码的时候去注意及时Dispose对象,释放不要的资源 这比去统一某个时间去集中调GC回收更好
引用 9 楼 hjywyj 的回复:
GC是很耗资源的,再说你只能通知他要进行垃圾回收了,并不意味着能立马执行回收
调用GC只是通知它需要 回收垃圾了,什么时候回收,还是要它自己决定的吗?
加载更多回复(10)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧