定期的なジョブに使用する方が良いのは、サービスとスケジュールされたタスクのどちらですか?

StackOverflow https://stackoverflow.com/questions/1430177

質問

30秒ごとに実行する必要があるタスクがあります。次の2つのいずれかを実行できます。

  1. タスクを1回実行し、30秒待機してから再度実行して終了するコマンドラインアプリを作成します。このタスクをWindowsのスケジュールされたタスクでスケジュールして、毎分実行することができます

  2. 各実行の間に30秒待機しながらタスクを繰り返し実行するサービスを作成します。

ナンバー1はもっと単純なもので、私の意見では、デフォルトでこのようにすることを選択します。私は泳いでいますか?これをスケジュールされたタスクではなくサービスにする必要がある理由はありますか?両方の長所と短所は何ですか、最後にどちらを選びますか?

役に立ちましたか?

解決

最近、この質問に関する素晴らしいブログ記事を読みました。定期的なジョブを実行するためにサービスを作成しない 理由はたくさんあります。さらに、この質問は以前に尋ねられました:

https://stackoverflow.com/questions / 390307 / windows-service-vs-scheduled-task Windowsサービスまたはスケジュールされたタスク、どちらを優先しますか?

スケジュールされたタスクを使用する利点の1つは、メモリリークやネットワーク接続のハングなど、サービスの実行に伴う潜在的なリスクがある場合、Windowsサービスが長時間にわたってハングし、他のサービスに悪影響を及ぼす可能性があることです。ユーザー。一方、スケジュールされたタスクは短時間実行されるように記述されているため、たとえリークしたとしても効果は最小限に抑えられます。

一方、上記の質問のいずれかの人は、スケジューラには1分の範囲内の精度の限界があるとコメントしたため、スケジューラは30秒ごとにタスクを実行できないことがわかります精度。

明らかに、考慮すべき多くのトレードオフがありますが、うまくいけば、これが適切な決定を下すのに役立つでしょう。

他のヒント

30秒ごとに実行しようとしている場合は、オプション2に進みます。この場合、これはほとんど継続的に実行されるジョブです。特に適切なタイマーを使用している場合、プロセスを開始および停止するオーバーヘッドはおそらくプロセス自体よりも高くなります。

1日に1回(または1日に2、3回)実行するジョブを作成する場合、オプション1-スケジュールされたタスクを使用します。

Windowsのタスクスケジューラは、私の意見では少しおかしいようです。サービスとして実行すると、より信頼性の高い結果が得られると思います。

また、サービスは、ファイルからの入力の読み取りなど、メモリにリソースを保持し、30秒ごとではなく、サービスの起動時にのみこれを行う必要があります。

30秒は、処理サイクル間のかなり短い間隔です(比較的言えます)。他の人と同じように、私はタスクスケジューラについて心配しています。そのような短い間隔は、そのアプローチをとった場合に発生する可能性のある問題を悪化させるだけだと思います。これが私のプロジェクトである場合、私はほぼ間違いなくこのサービスを利用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top