2009-09-15 104 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秒是處理週期之間相當短的時間間隔(相對而言)。像其他人一樣,我對任務調度程序有擔憂,恐怕如此短暫的時間間隔只會增加您在採取這種方法時可能遇到的問題。如果這是我的項目,我幾乎肯定會與這項服務。