6

いくつかのメンテナンス タスクを実行する C# アプリケーションがあります。少しずれていてもそれほど重要ではありませんが、ほぼ毎時間実行する必要があります。また、誰もログインしていない Win2003 サーバーで実行する必要があります。

基本的に、Windows サービスを作成する必要があるかどうか、また、そうである場合、Thread.Sleep() がスレッドを 1 時間一時停止する適切な方法であるかどうか、またはスレッドがアイドル状態のままであることを確認するためのより良い方法があるかどうか疑問に思います。サーバーの負荷は?(別名、スピンロックの最も反対のものは何ですか)

代替手段は Windows タスク スケジューラですが、それがサーバーでの使用に適しているかどうかはわかりません。なぜなら、a) スケジュールを app.config ではなくタスク スケジューラに保存する必要があるからです。b) サービスを簡単に制御できないからです。開始/停止/再起動および c) Windows ユーザーの資格情報が、サービス MMC スナップインに入力したときと同じくらい安全かどうかわかりません。

あなたの意見は何ですか?アイドル状態の Service を持つことは可能であり、良いことですか?それとも、代わりにタスク スケジューラをお勧めしますか?

4

6 に答える 6

5

必要に応じてスケジュールを維持および変更するのが簡単なため、私はタスク スケジューラを好みます。

また、継続的に実行されて「スリープ」するユーティリティは、開発者がクローズ接続やファイルなどの作業を「忘れる」と、時間の経過とともに蓄積される可能性のある問題を引き起こすリスクがあります。プログラムを「実行して終了」させることは、追加の安全ブランケットです。:-)

于 2009-01-26T23:10:32.733 に答える
1

サービス ルートに進む場合は、System.Threading.Timer の使用をお勧めします。これにより、1 時間に 1 回イベントを発生させるように設定できます。間隔を変更する必要があると思われる場合は、間隔を app.config に入れることができます。

サービスはローカル システム アカウントでも実行されますが (既定では)、スケジュールされたタスクを使用する場合はユーザー名とパスワードを指定する必要があります。ユーザー名を使用する場合、パスワードを変更してタスクを更新するのを忘れると、メンテナンスの問題になります。

実際に両方を組み合わせて使用​​している状況があります。サービスは日中常に稼働していますが、毎晩ネットワークとデータベースのメンテナンスを行っています。そのため、2 つのスケジュールされたタスクを使用します。1 つは深夜にサービスをシャットダウンし、もう 1 つは午前 4 時にサービスを再開します。これは、NET STOP/NET START コマンドで .BAT ファイルを呼び出すことによって行われます。

于 2009-01-26T23:14:39.230 に答える
1

Windows サービスはおそらくより信頼性が高く、監視しやすいと思いますが、すぐに使用できるスケジュールされたタスクと同じようなスケジューリングの柔軟性は提供されません。ほとんどのエンタープライズ アプリは、スケジュールされたタスクではなく、サービスとして実行される傾向があるため、とにかくサービスを使用することにします。

最近のプロジェクトでは、Quartz.NETを使用して、Windows サービスでスケジュールされた処理をセットアップしました。実際、セットアップはそれほど難しくありません (優れたチュートリアルです)。CronTrigger を使用すると、わずかな構成で非常に柔軟になります。生の .NET タイマーよりも気に入っています。

于 2009-03-09T04:54:03.140 に答える
1

Windows サービスはより安全です。だれもドロップできず、機能します。Windows タスク (実行されないなど) に関する多くの問題を発見しました。

Windows タスク スケジューラは、アプリケーション タスク用ではなく、エンド ユーザー タスク用です。とにかく、Windowsバックアップはそれを使用します;-)

于 2009-01-26T23:07:13.567 に答える
1

タスクスケジューラを使用すると、タスクが実行されていないときにメモリを節約できます。

于 2009-06-25T22:48:44.710 に答える