具有多个计时器的Windows服务

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

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

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

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

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

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

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

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

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

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