2009-09-15 39 views
4

我有一项任务需要每30秒运行一次。我可以做两件事之一:哪个更适合重复使用:服务或计划任务?

  1. 编写一个命令行应用程序,运行任务一次,等待30秒,再次运行,然后退出。我可以使用Windows中的计划任务来安排此任务以每分钟运行

  2. 编写一个服务,在每次运行之间等待30秒时重复运行任务。

数字1更微不足道,在我看来,我会选择默认这样做。我在勉强吗?为什么我应该把这个服务做成一项服务而不是一项计划任务是否有原因?两者的优点和缺点是什么?你最终会选择哪一个?

回答

8

I read a nice blog post about this question recently。它有很多很好的理由,你为什么应该而不是写一个服务来运行一个重复的工作。此外,这个问题已经被问过:

https://stackoverflow.com/questions/390307/windows-service-vs-scheduled-task Windows Service or Scheduled Task, which one do we prefer?

一个优点使用计划任务的是,如果有参与运行的服务,如内存泄漏或挂网络连接的一些潜在风险,那么Windows服务可能会长时间挂起,并对其他用户造成不利影响。另一方面,计划的任务被写为短期运行,所以即使它泄漏,效果也会最小化。

另一方面,在上述问题之一中的某人评论说,调度程序在1分钟范围内某处的准确性限制,因此您可能会看到调度程序无法每30秒运行一次任务准确。

显然有一些权衡考虑,但希望这可以帮助你做出一个好的决定。

+0

你总是可以在中间见面,并通过调度器让你的过程每分钟运行一次,完成任务,休眠30秒,然后再次完成任务并退出。 – ryeguy 2009-09-16 02:29:33

+0

是的,我真的会运行5分钟的应用程序(做10个周期,每个之间30秒)。如果它在正在运行的实例之间运行时间更长并不重要,只要它不会每30秒运行一次以上。 – Jason 2009-09-16 02:37:59

3

如果你想每30秒运行一次,我会选择第2项。在这种情况下,这几乎是一个持续运行的工作。启动和停止进程的开销可能高于进程本身,尤其是如果您使用适当的计时器。

如果您制作的作业每天运行一次(或每天几次),那么我会选择1 - 使用计划任务。

2

在我看来,Windows中的任务调度程序似乎有点苍白。我想你会得到更可靠的结果作为服务运行。另外,服务可以将资源保存在内存中,例如从文件读取输入,并且只需在服务启动时执行此操作,而不是每30秒执行一次。

0

30秒是处理周期之间相当短的时间间隔(相对而言)。像其他人一样,我对任务调度程序有担忧,恐怕如此短暂的时间间隔只会增加您在采取这种方法时可能遇到的问题。如果这是我的项目,我几乎肯定会与这项服务。