Windows Service 中New Timer造成内存无止境增长的问题
最近写了个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 );
}
[解决办法]
你每10秒钟就创建新的Timer对象干什么?
用一个Timer跑一天不就行了嘛。
[解决办法]
你这个timer不会被回收,而且timer事件是一直调用创建timer的ReadDev方法,这样造成无休止的创建timer
[解决办法]
“回收”Timer并不会清理Timer委托中申请的内存。检查ReadDev是否有内存泄漏。
再者说,你也没有必要不断的创建Timer、销毁它。