哪个更适合用于定期工作:服务或计划任务?

时间:2009-09-15 23:37:44

标签: c# windows-server-2008 scheduled-tasks cmd

我的任务需要每30秒运行一次。我可以做两件事之一:

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

  2. 编写一个在每次运行之间等待30秒的情况下重复运行任务的服务。

  3. 在我看来,数字1更为微不足道,我会默认选择这样做。我懦弱了吗?我有理由将其作为服务而不是计划任务吗?两者的优点和缺点是什么,你最终会选择哪一个?

4 个答案:

答案 0 :(得分: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秒执行一次任务精度。

显然需要考虑一些权衡因素,但希望这有助于您做出正确的决定。

答案 1 :(得分:3)

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

如果你的工作每天运行一次(或一天几次),那么我会选择使用预定任务的选项1。

答案 2 :(得分:2)

在我看来,windows中的任务调度程序看起来有点不稳定。我想你会得到一个更可靠的服务结果。

此外,服务可以将资源保留在内存中,例如从文件读取输入,只需要在启动服务时执行此操作,而不是每30秒执行一次。

答案 3 :(得分:0)

30秒是处理周期之间相当短的间隔(相对而言)。和其他人一样,我对任务调度程序感到担心,我担心这样一个短暂的间隔只会加剧你采取这种方法时可能遇到的问题。如果这是我的项目,我几乎肯定会使用该服务。