質問

非常によく似た質問があることは知っています ここ しかし、私はより良い説明を得たいと思っていました。 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など...)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top