2009-03-27 5 views
3

私のウェブサイトに10分ごとに多数の計算を行い、その結果でデータベースを更新したいと考えています。どのように正確にそのようなタイマーを設定すれば、私はそれがglobal.asaxにあると仮定していますか?asp.netで自動 "ジョブ"を実行するには?

答えて

4

はどこかに難しく、不可能に不安定との間にあります。 Webアプリケーションは、単純にノンストップで実行されるのではなく、要求に応答するためのものです。

10分ごとに実際に計算する必要がありますか?私は、ほとんどの場合、誰かがこのような質問をすると、一定の間隔で何かを実行する必要があることが分かりましたが、結果を見るためにページを訪れる人がいない限り、結果は本当に必要ありません計算される。

これが当てはまる場合は、前回の計算がいつ行われたかを常に把握するだけで、すべてのリクエストに対して、再計算に十分な時間がかかっていないかチェックする必要があります。

4

あなたは独立した非UIアプリケーションを作成し、そのスケジュールされたタスクとして実行したほうが良いと思います。

+0

私は同意します。 Webサーバーは、スケジュールされた時間に機能を実行するのではなく、ページを提供するためのものです。理由がない限り(サーバーへのアクセス不足など)、サービスでなければなりません。 –

+0

Windowsサービスは、誰かがログインしているかどうかにかかわらず、常に実行する必要がある場合は、時計を起動する必要があります。 –

+0

@ marc_s - 誰もマシンにログインしていないときにスケジュールされたタスクを実行するように設定することができます。 – ChrisF

0

cagdasのキャッシュソリューションが回答します。私はそれを使用しました。欠点は、何らかの理由でタイマーを停止する必要がある場合は、電源を切ることが難しいことです。代わりに、私たちが使用した全く同じソリューションはありません。 SQL Serverの

  • スケジュールWindowsタスクで

    1. スケジュールされたタスク。その厳密なデータベース計算IFS
  • 2

    、データベースに保管してください。必要な処理を行うストアドプロシージャを作成し、SQL Serverエージェントでそのプロシージャをスケジュールに従って実行させます。

    0

    私は本当にschecduledタスクが嫌いです。私はむしろ窓のservicにこの機能を入れ、それにタイマーを投げます。ウィンドウサービスを使用すると、非常にうまくストップイベントを処理できます。私は他のみんなに同意します、ウェブサイトはこれのための場所ではありません。 Webアプリケーションでそのような何かをやって

    +0

    サービスはいつでもスケジュールされたタスクよりも面倒なようです。サービスとは、「待つ」もののためのものです。 –

    3

    別にスケジュールされたタスクを実行するためのWebアプリケーションの不安定性について(正しい)の文から、ここにあなたが実装できる戦略です:Global.asaxの中

    、タイマーを作成するapplication.onstartイベントを定義します。

    var dueTime = 5000; 
    var period = 5000; 
    var MyTimer = new Timer(new TimerCallback(MyClass.MyTaskProc), null, dueTime, period); 
    Application["MyTaskTimer"] = MyTimer; 
    

    これは、タスクを作成してからアプリケーションを終了するときに再起動する処理を行います。

    関連する問題