2012-05-25 7 views
5

私のアプリケーションで何かをキャッシュする必要があるとき、私はWeb.Caching.Cacheを選んでいました。しかし、代わりにHttpApplicationStateを使用しているいくつかのレガシーコードがありました。Web.Caching.CacheではなくHttpApplicationStateを使用するのはいつですか?

Web.Caching.Cacheはより強力で柔軟性があります(これ以上のようです).HttpApplicationStateを使用する方が良いでしょうか?

あなたが私に

+0

私はApplicationStateを使用しません。私はそれがレガシーコード(古いASPの日)のためだと思う – TGH

+0

@TGH http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspxまだ4.0人で – rhapsodyn

+0

はい私はそれがまだそこにあると思う、しかし、私はそれを使用すると考えていた時間を覚えていません。私は、私が考えることができる唯一の利点は、期限切れではないことだと思う。 – TGH

答えて

13

:-)いくつかの例の両方HttpApplicationStateとWeb.Caching.CacheはASP.Netアプリケーション内でグローバルにアクセスすることができる情報を格納するために使用することができますを示すことができる場合、私は非常に感謝されます。しかし、彼らは非常に異なる用途を持っています。

HttpApplicationStateは、通常は変更されないアプリケーションデータを格納するために使用されます。通常、アプリケーションの起動時に、global.asaxのApplication_Startに値が設定されます。私は個人的にそれをあまり使用していませんが、通常、アプリケーションのすべてのユーザーに共通で、変更や変更が非常に少ないアプリケーション構成の小さな部分を格納するために使用されます。アプリケーション状態に入るものは、アプリケーションがリサイクルするまで無期限にそこにとどまります。しかし、リサイクルして再び再起動すると、Application_Stateが再び実行され、再設定されます。

アプリケーション状態はシングルトンであり、スレッドセーフではありません。そのため、変更を加えるときは、Application.Lock()とApplication.UnLock()の呼び出しによってApplicationオブジェクトをロックしてロックを解除する必要があります。

実際にASP.Netコンテンツをキャッシュするには、ページレベル、部分ページ、およびデータの3つの方法があります。私はデータキャッシングについて話をするつもりです。なぜなら、それはあなたの質問に最も関連していると思うからです。 ASP.Netキャッシュは、大量のアプリケーションデータを格納するために使用されます。大量のアプリケーションデータは、要求ごとにデータストアから取得するために使用されます。ApplicationStateとCacheの主な違いは次のとおりです。1)キャッシュデータが期限切れになるように設計され、アプリケーションがリサイクルされるまで、ApplicationStateは永遠にそこに置かれますが、2)サーバーに重大なメモリ圧迫が発生している場合は、キャッシュデータをメモリから消去することができます。このように、さまざまなトリガーや条件(時間、その他のキャッシュ依存性など)そこに存在することは決してありません。常に存在するかどうかを確認する必要がありますが、ApplicationStateは常にそこに存在します。

キャッシングは、要求に応じてデータベースから取得する必要のないアプリケーションに近いデータを格納するために使用されます。キャッシュは非常に大量のデータを格納するように設計されており、インテリジェントなキャッシュアーキテクチャはパフォーマンスに非常に良い影響を与える可能性があります。

+0

今、私はHttpApplicationStateの代わりにCacheを使うことができると確信している。 – rhapsodyn

+5

.NET 4.0以上を使用しているならASP.NETまたは.NETプロジェクトでSystem.Runtime.Caching.MemoryCacheを使用します。 http://msdn.microsoft.com/en-us/library/dd997357.aspx – bounav

関連する問題