2009-07-10 23 views
19

私は非常によく似た質問があることを知っていますhereしかし、私はより良いexplinationを得ることを望んでいた。 HttpContextが実際にHttpRuntime.Cacheをシーンの背後で使用する場合、なぜHttpRuntime.Cacheの代わりにHttpContext.Cacheを使用するのですか?HttpRuntimeキャッシュとHttpContextキャッシュの違いは何ですか?

記事でSimulate a Windows Service using ASP.NET to run scheduled jobs OmarはHttpContextを使用してキャッシュアイテムを保存しますが、Jeff Atwoodが実装したときにはhereを使用して、代わりにHttpRuntimeを使用するようにしました。明らかにこの特定の状況では、キャッシュ項目をHttpContextに追加するWebリクエストを行う必要がないので、意味があります。

しかし、どちらかを使用するかについては、私はいくつかの良い指針を探しています。

答えて

13

実際には最後のキャッシュは同じですが、HttpContext.Currentはnull(WebコンテキストやWebコンテキストではないがまだ構築されていない場合)になることがあります。常にHttpRuntime.Cacheを使用すると安全です。

2

通常のWebページを使用している場合は、HttpContext.CacheまたはページのCacheのプロパティを安全に使用できます。

ページにないものを実行している場合、そのページに安全にアクセスするには、しばしばHttpRuntime.Cacheを使用する必要があります。

httpコンテキストがあるかどうかを知ることができます。たとえば、Webページから別のスレッドを開始した場合、そのスレッドにはhttpコンテキストがありません。場合によっては、Application_Startメソッド(global.asax)のようなhttpコンテキストがあることもあります。リクエストがあるため、アプリケーションが起動しないことがあります。

2

内部ではHttpRuntime.Cacheを返すだけであることは間違いありません。また、HttpRuntimeは、私が推測するキャッシュを公開するための悪い選択です。

誰もがSessionがセッションレベルのキャッシュであり、私たちが話しているキャッシュはアプリケーションレベルです。今日使用しているキャッシュにはApplication.Cacheが、としてはHttpContext.Cacheがあります。

あなたの質問に答えるには、私たちはHttpRuntime.Cacheに固執する必要があります。私たちは、さまざまな方法でアクセスしてもコードを明確にします。真剣に使用する予定がある場合は、独自のAPIをラップして、内部でHttpRuntime'sやその他のキャッシュ実装(EntLib、Velocityなど)を呼び出す方がよいでしょう。

関連する問題