我有一个用c#编写的windows服务。它内部有一个计时器,可以定期触发一些函数。所以我的服务的框架是:
public partial class ArchiveService : ServiceBase
{
Timer tickTack;
int interval = 10;
...
protected override void OnStart(string[] args)
{
tickTack = new Timer(1000 * interval);
tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
tickTack.Start();
}
protected override void OnStop()
{
tickTack.Stop();
}
private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
}
它工作一段时间(例如10-15天),然后停止。我的意思是,服务显示为正在运行,但它没有做任何事情。我做了一些日志记录,问题可能出在计时器上,因为在此时间间隔之后,它不会调用tickTack_Elapsed函数。
我正在考虑不使用计时器重写它,使用一个无限的循环,在我设置的时间量内停止处理。这也不是一个优雅的解决方案,我认为它可能会对记忆产生一些副作用。
计时器从System.Timers命名空间中使用,环境是Windows2003。我在不同服务器上的两个不同服务中使用了这种方法,但两者都产生了这种行为(这就是为什么我认为它以某种方式连接到我的代码或框架本身)。
有没有人经历过这种行为?会出什么问题呢?
编辑:
我编辑了这两个服务。其中一个得到了很好的尝试--到处捕捉和更多的日志记录。第二个人定期进行计时器再利用。从那以后他们都没有停止,所以如果这种情况再持续一周,我将结束这个问题。到目前为止,感谢大家。
编辑:
我结束这个问题是因为什么都没发生。我的意思是,我做了一些更改,但这些更改与这件事并不相关,从那时起,这两个服务都运行得很顺利。请将其标记为“已关闭,因为不再相关”。
https://stackoverflow.com/questions/397744
复制相似问题