録画サービスの呼び出しや処理を行っている番組を書いています。通話を開始および終了するユーザーが多数いるため、今日開始された通話の合計数と本日終了した通話の合計数、およびそれらの差を常に表示したいと考えています。アプリケーション変数でそれを行うことを考えました。これらの変数を毎日 0 にリセットする必要があります。どこでそれをしますか?私は Global.asax で考えましたが、どのイベントでそれを行うことができますか? アプリケーションは常に実行されているため、 Application_Start は適切ではないと思います。それでどこ?ありがとうございました。
4 に答える
IISでアプリケーション プールのリサイクルの定期的な再起動設定を構成できます。
この要素には、アプリケーション プールをいつリサイクルするかを制御できる構成設定が含まれています。インターネット インフォメーション サービス (IIS) 7 が時間間隔 (分単位) の後、または毎日特定の時刻にアプリケーション プールをリサイクルするように指定できます。アプリケーション プール内のワーカー プロセスが使用している仮想メモリまたは物理メモリの量に基づいてリサイクルするように IIS を構成したり、ワーカー プロセスが特定の数の要求を処理した後にアプリケーション プールをリサイクルするように IIS を構成したりすることもできます。
ただし、これには、プールの再起動中にアプリケーションがオフラインになるという副作用があるため、その時点で接続しているユーザーがいると、セッションが失われます。これは、夜明けなど、ユーザーが接続していないときにアプリケーションを再起動することで最小限に抑えることができます。
次の構成スニペットは、毎日午前 3 時にアプリケーション プールをリサイクルするように設定します。
<add name="Example">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
通話をデータベースに保存し、当日までにどのグループを選択して合計通話数などを表示するかを選択します。
そうすれば、新しい日が始まると自動的にリセットされるため、IIS リセットがメモリ内データを破壊することを心配する必要はありません。
頻繁にクエリを実行してパフォーマンスを低下させたくない場合は、いくつかのキャッシュ オプションを利用できます。