具有多个计时器的Windows服务

时间:2011-11-10 13:48:18

标签: c# .net .net-3.5 windows-services timer

我在当前实习期间获得了一位前实习生编写的Windows服务,该服务监控存档并通过电子邮件和弹出窗口警告特定人员,如果其中一个记录值超出某个范围。它目前使用计时器每30秒检查一次存档,我被问到是否可以更新它以允许选择时间,具体取决于所监视的“标记”。它使用XML文件来跟踪正在监视的标记。在服务中创建多个计时器是最有效的方法吗?我不确定采取什么方法。

该服务使用.NET 3.5以C#编写。

3 个答案:

答案 0 :(得分:2)

根据粒度,您可以使用单个计时器,它是所需时间间隔的公共因子。假设他们想要放入XML文件,每隔几分钟就要检查一次存档。你设置了一个每分钟关闭一次的计时器,你可以检查自从你完成每个计时器以来的持续时间以及是否这样做。

如果您有机会重新设计,我会从服务转移到一组计划任务。写它所以一个任务做一个存档。然后编写一个控制器程序来设置计划任务(并且可以阻止它们,更改它们等).Windows 7上的计划任务的API很好且易懂,而且与服务不同,你可以施加限制,例如“不要这样做”如果计算机处于电池状态,“或”仅在计算机处于空闲状态时执行此操作“以及如果错过了运行任务的机会您应该采取的操作。 7或8个计划任务,每个都按照自己的计划,使用您的相同API,传入存档路径和电子邮件地址,比一次尝试处理所有内容的服务要简洁得多。此外,当您没有其他自动启动服务时,机器将启动得更快。

答案 1 :(得分:1)

高效?可能不是 - 特别是如果你有很多标签,因为每个计时器只需要很少但有限的资源。

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

如果出现问题,这样可以更容易调试,因为只有一个活动线程。

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

答案 2 :(得分:1)

我建议只使用一个按最小公约数计划的计时器。

例如,将您的计时器配置为每秒发出信号,您可以通过计算相应的计时器滴答数来处理每个间隔(1秒,2秒......)。