Windows Service 中New Timer造成内存无止境增长的问题

lvyb062 2014-01-04 01:02:32
最近写了个Windows服务,服务跑起不到1天就会因为内存占用太大而当机。
然后我屏蔽了业务代码,仅留下new Timer的代码(如下面的代码段)
但问题依旧,所以想请教高人服务里的timer怎么使用才得当?

//百度说这个声明必须放在外部,否则会被垃圾回收
private System.Threading.Timer tMain = null;

private void ReadDev( object obj )
{
//释放tMain占用的资源
tMain.Dispose();
//。。。屏蔽的业务代码
tMain = new System.Threading.Timer( ReadDev, null, 10000, 0 );
}



//下面是一个临时方案,期待更好的解决方案。

//百度说这个声明必须放在外部,否则会被垃圾回收
private System.Threading.Timer tMain = null;

private void ReadDev( object obj )
{
//释放tMain占用的资源
tMain.Dispose();
//。。。屏蔽的业务代码

while ( /*需要重新开始ReadDev的条件*/ ) {
//。。。屏蔽的业务代码
Thread.Sleep( 10000 );
}

tMain = new System.Threading.Timer( ReadDev, null, 10000, 0 );
}
...全文
315 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-01-04
  • 打赏
  • 举报
回复
“回收”Timer并不会清理Timer委托中申请的内存。检查ReadDev是否有内存泄漏。 再者说,你也没有必要不断的创建Timer、销毁它。
bdmh 2014-01-04
  • 打赏
  • 举报
回复
你这个timer不会被回收,而且timer事件是一直调用创建timer的ReadDev方法,这样造成无休止的创建timer
lvyb062 2014-01-04
  • 打赏
  • 举报
回复
引用 4 楼 bdmh 的回复:
你这个timer不会被回收,而且timer事件是一直调用创建timer的ReadDev方法,这样造成无休止的创建timer
引用 5 楼 caozhy 的回复:
“回收”Timer并不会清理Timer委托中申请的内存。检查ReadDev是否有内存泄漏。 再者说,你也没有必要不断的创建Timer、销毁它。
谢谢,我上面没说清楚。 现在的代码是这样的 请帮忙看看这个ReadDev是否会一直的执行下去?
//百度说这个声明必须放在外部,否则会被垃圾回收
private System.Threading.Timer tMain = null;
 
private void ReadDev( object obj )
{
    //。。。屏蔽的业务代码
}

protected override void OnStart( string[] args ) {
    logMain.WriteEntry( "启动服务", EventLogEntryType.Information );
    //服务启动5分钟后才开始工作,为了防止比依赖服务启动的早。
    tMain = new System.Threading.Timer( ReadDev, null, 300000, 10000 );
}
lvyb062 2014-01-04
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
你每10秒钟就创建新的Timer对象干什么? 用一个Timer跑一天不就行了嘛。
哎,谢谢,你提醒了我,刚才仔细看了参数说明,现将代码修改为 tMain = new System.Threading.Timer( ReadDev, null, 0, 10000 ); 不知道这样做是否会被系统回收
lvyb062 2014-01-04
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
你每10秒钟就创建新的Timer对象干什么? 用一个Timer跑一天不就行了嘛。
这个timer在服务里只执行一次
  • 打赏
  • 举报
回复
你每10秒钟就创建新的Timer对象干什么? 用一个Timer跑一天不就行了嘛。

12,166

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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