web-dev-qa-db-ja.com

メモリ内のアプリケーションデータのキャッシュ:MVC Web API

ドロップダウンボックスにバインドされる値を返すために使用される、またはWebサイトで先行入力テキストボックスの結果として使用されるMVC webAPIを記述し、データベース要求を実行する必要がないように値をメモリにキャッシュしたいAPIがヒットするたびに。

MemoryCacheクラスを使用し、最初のリクエストが来たときにキャッシュにデータを追加できることは知っていますが、APIへの最初のリクエストが他のリクエストより遅くなるのは望ましくありません。私の質問は次のとおりです。WebAPIの最初の起動時にキャッシュを自動的に読み込む方法はありますか? 「App_Start」フォルダがありますが、ここに何かを投げるだけですか?

最初の投入後、必要に応じてキャッシュを更新するために、おそらく1時間ごとまたは1日ごとにリクエストを実行します。

MemoryCache: http://msdn.Microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

[〜#〜] udpate [〜#〜]

以下のElaの答えは、トリックを行いました。基本的には、Global.asaxの機能を調べるだけでした。ここでの迅速な支援に感謝します。これにより、さまざまなキャッシングタイプの長所/短所についての別の質問が生まれました。

異なるASP.NETキャッシングオプションの長所/短所

22
vesuvious

Global.asax appplication startメソッドを使用して、リソースを初期化できます。基本的にアプリケーション全体で使用されるリソース。

次のリンクは、詳細情報を見つけるのに役立ちます。 http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

ヒント:プロセスキャッシングで使用する場合(通常、Webコンテキスト/スレッド内で何かをキャッシュする場合)、WebアプリケーションはIISによって制御されることに注意してください。標準のIIS設定は、ユーザー要求を処理する必要がない場合、20分後にWebアプリケーションをシャットダウンします。つまり、メモリ内のリソースはすべて解放されます。

これが発生すると、ユーザーが次にWebアプリケーションにアクセスしたときに、グローバルなasaxのアプリケーションの起動が再び実行されます。これは、IISがWebアプリケーションを再初期化するためです。 20分後にタイムアウトしないようにアプリケーションプールのアイドルタイムアウトを構成するか、別のキャッシュ戦略(永続キャッシュ、分散キャッシュなど)を使用します。

このためにIISを構成するには、ここで詳細情報を見つけることができます: http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

22
MichaC