【发布时间】:2014-08-28 10:39:11
【问题描述】:
我有一个带有以下主程序的控制台应用程序:
static void Main(string[] args)
{
var timer = new System.Threading.Timer(
e =>
{
//some code here
},
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(1));
var backupTimer = new System.Threading.Timer(
e =>
{
//some code here
},
null,
TimeSpan.Zero,
TimeSpan.FromHours(24));
Console.ReadLine();
}
问题在于,在调试模式下它工作正常,并在正确的时间段内调用两个计时器中的方法,如果在控制台中输入某些内容,程序将结束工作(Console.ReadLine() 就是为了那个),但是当我运行程序时在 Release 模式下,两个定时器只调用一次(第一次),然后程序只是等到我输入一些东西。
如何解决这个问题,以便我可以编译一个正常工作的独立程序?
【问题讨论】:
-
看起来定时器被 GC 抑制了。
-
您需要保留对计时器的引用作为字段。否则,GC 会吃掉它。
-
那为什么在调试模式下能正常工作呢?
-
@AdrianoRepetti 不,JIT 很聪明,可以判断是否不再使用本地人。如果没有,jit 会告诉 GC 他们可以被 GC'd。请参考我上面的评论,汉斯解释得很好..
标签: c# debugging timer release