首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

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

2014-01-05 
Windows Service 中New Timer造成内存无止境增长的问题最近写了个Windows服务,服务跑起不到1天就会因为内

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、销毁它。

热点排行