HTTPRUNTIMEキャッシュとHTTPContextキャッシュの違いは何ですか?
-
12-09-2019 - |
質問
非常によく似た質問があることは知っています ここ しかし、私はより良い説明を得たいと思っていました。 httpcontime.cacheの代わりにhttpcontext.cacheを使用するのはなぜですか?httpcontextが実際にhttpruntime.cacheを舞台裏で使用しているのですか?
記事で ASP.NETを使用してWindowsサービスをシミュレートしてスケジュールされたジョブを実行します OmarはHTTPContextを使用してキャッシュアイテムを保存しますが、Jeff Atwoodがそれを実装したとき ここ 彼は代わりにhttpruntimeを使用することを選択しました。この特定の状況では、キャッシュアイテムをhttpcontextに追加するためにWebリクエストを実行する必要がないため、明らかに理にかなっています。
しかし、私は一方を他方に対していつ使用するかについてのいくつかの良いポインターを探しています。
解決
それは本当に最後に同じキャッシュです、 HttpContext.Current
nullになる場合があります(Webコンテキストではない場合、またはWebコンテキストではまだ構築されていない場合)。常に使用しても安全です HttpRuntime.Cache
.
他のヒント
通常のWebページにいるときは、安全に使用できます HttpContext.Cache
またはただ Cache
ページのプロパティ。
あなたがページにない何かをしているなら、あなたはしばしば使用する必要があります HttpRuntime.Cache
安全にアクセスするため。
場合によっては、HTTPコンテキストがあるかどうかを知ることができます。たとえば、Webページから別のスレッドを開始した場合、そのスレッドにはHTTPコンテキストがありません。他のケースでは、httpコンテキストがある場合があります。 Application_Start
メソッドイン global.asax
, 、リクエストがあるため、アプリケーションが常に開始されるとは限らないためです。
私たちは皆、それがただ戻ってくることを知っていますが、私もそれが誤解を招くと思います HttpRuntime.Cache
初めの。また、httpruntimeは、私が推測するキャッシュを公開するのに悪い選択のようなものです。
みんなサイズどうだろう Session
セッションレベルのキャッシュであり、私たちが話しているキャッシュはアプリケーションレベルです。私は持っていることを望みます Application.Cache
今日使用しているキャッシュとして HttpContext.Cache
として知られているものを参照します HttpContext.Items
.
あなたの質問に答えることに関しては、私たちは皆、httpruntime.cacheに固執するべきだと思います。そして、あなたが真剣にそれを使用することを計画しているとき、あなたはあなた自身のAPIをラップし、それを内部的に呼び出す方が良いでしょう HttpRuntime's
またはその他のキャッシュ実装(Entlib、Velocityなど...)。