带有多个计时器的Windows服务

本文关键字:Windows 服务 计时器 | 更新日期: 2023-09-27 18:13:58

在我目前的实习期间,我的前任实习生给我提供了一个windows服务,该服务可以监控存档,并在某个记录值超出一定范围时通过电子邮件和弹出窗口提醒特定的人。它目前使用一个计时器每30秒检查一次存档,有人问我是否可以更新它,以允许根据正在监控的"标签"选择时间。它使用一个XML文件来跟踪正在监视的标记。在服务中创建多个计时器是最有效的方法吗?我不知道该采取什么方法。

服务是使用。net 3.5用c#编写的。

带有多个计时器的Windows服务

根据粒度,您可以使用单个计时器,这是他们想要的定时间隔的一个共同因素。假设他们想在XML文件中放入每隔几分钟就要检查一次的归档文件。你设置了一个每分钟响一次的计时器,你可以检查每件事你做了多长时间,以及是否做了。

如果您有机会重新架构,我会从服务转移到一组计划任务。这样写,一个任务处理一个存档。然后编写一个控制器程序来设置计划任务(并可以停止它们,更改它们等)Windows 7上计划任务的API很好,可以理解,不像服务,你可以施加限制,如"不要在电脑有电的时候这样做"或"只有在机器空闲的时候才这样做",以及你的偏好,如果错过了运行任务的机会该怎么做。7或8个计划任务,每个任务都有自己的时间表,使用你的相同API,传递存档路径和电子邮件地址,这比一个试图同时处理所有事情的服务要简洁得多。另外,当你没有其他自动启动服务时,机器会启动得更快。

高效?可能不会——特别是如果你有很多标签,因为每个计时器占用的资源很少,但数量有限。

另一种方法可能是设置一个每秒触发一次的计时器,当这种情况发生时,您检查未完成请求的列表。

如果出现问题,这样做的好处是更容易调试,因为只有一个活动线程。

与大多数代码维护情况一样,这取决于您现有的代码、您的能力以及您如何感觉更舒适。

我建议只使用一个在最小公约数上调度的计时器。

例如,配置你的定时器信号每秒钟,你可以处理每一个间隔(1秒,2秒,…)通过计算定时器滴答的相应数量