最近、ASP.NET MVC WebAPIアプリケーションでアプリケーションデータをキャッシュすることについて質問したところ、新しい質問がありました。 ASP.NETで利用できるさまざまなキャッシュ方法の長所と短所は何ですか?
私は出くわしました:
メモリキャッシュ
http://msdn.Microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
静的メンバー変数の使用:
private static Northwind.SuppliersDataTable suppliers = null;
アプリケーションの状態:
HttpContext.Current.Application["key"] ="Value"
データキャッシュ:
HttpRuntime.Cache.Insert(
/* key */ "key",
/* value */ "value",
/* dependencies */ null,
/* absoluteExpiration */ Cache.NoAbsoluteExpiration,
/* slidingExpiration */ Cache.NoSlidingExpiration,
/* priority */ CacheItemPriority.NotRemovable,
/* onRemoveCallback */ null);
他にもあると確信しており、それらはすべて技術的にデータをメモリに保存していることを知っています... ASP.NET MVC webapiに何を使うべきか考えていますか?
各キャッシングテクノロジー/メソッドには、独自の機能セットがあります。これらの機能は、あるアプリケーション要件では不利に思えるかもしれませんが、他のアプリケーション要件では有利になる場合があります。
つまり、要するに、要件に応じて、どのキャッシングテクノロジーとどの機能が最適かを決定します。
For example, Let us discuss some client side Caching techniques
。
MSDNは、HiddenField
を使用して、頻繁に変更される少量のデータのみを非表示フィールドに保存できると述べています。このデータは、ポストバックごとにサーバーへのラウンドトリップに含まれるからです。
この機能の利点:クライアント側オプションを使用してページ情報を保存することにより、サーバーの負荷を軽減。
ただし、MSDNは次のように明確に述べています。このアプローチには最小限のセキュリティサポートしかありません。
したがって、セキュリティ上の考慮事項もあるため、この機能を常に使用する場合と使用しない場合があります。
Consider one more example
、Page Output caching
:ページ出力キャッシュとページフラグメントキャッシュの2種類です。
ページ出力キャッシュは、Webページ全体をキャッシュし、そのページのコンテンツがかなり静的な場合にのみ適しています。ページの一部が変更されている場合は、静的セクションをユーザーコントロールとしてラップし、ページフラグメントキャッシュを使用してユーザーコントロールをキャッシュできます。
And one last comment on
Application
vs HttpRuntime.cache
:
Application
はキャッシュではなく、グローバルな名前付き値のコレクションです。 Application
にオブジェクトを追加すると、appdomainがリサイクルされるまでオブジェクトは残ります。
Cache
:Application
またはCache
クラスのいずれかで頻繁に要求されるオブジェクトとデータをキャッシュすることにより、ASP.NETアプリケーションのパフォーマンスを大幅に向上させることができます。 Cache
クラスは、はるかに高い柔軟性と制御を提供しますが、キャッシングに関してApplication
クラスよりもスループットが向上するという点で、わずかな利点しかありません。 Cache
クラスの組み込みの潜在的な利点を正確に測定できるテストスキームを開発するのは非常に困難です。特徴。この場合、開発者は決定を下す必要があり、プロジェクトのニーズと利便性、およびその使用パターンに基づいている必要があります。詳細については、このリンクを確認してください。
すべてのキャッシュテクノロジーに関する完全な説明については、このMSDN記事を参照してください。 Asp.netで、各テクノロジーの機能について議論しました。
また、これらの2つのリンクは、開始するのに最適なソースです。
MemoryCache
対ASP.NETキャッシュについて:非常によく似た機能を提供します。 ASP.NET 4アプリケーションでは、他の理由がない限り、ASP.NETキャッシュを一般的に好むでしょう。それは、 。NET 4のバグ のためです。 。
静的フィールドは、有効期限ポリシーを必要としない共有データを保存するのに適しています。
アプリケーションの状態は、従来のASPと互換性のあるロックセマンティクスを備えた静的辞書以上のものではありません。従来のASPコードとの下位互換性のためにのみ使用します。
Web APIを使用する場合、キャッシングの最初の選択肢は常にHTTP応答にキャッシングヘッダーを設定することです。 HttpResponseMessage.CacheControlHeader
。
最後のオプションは、HttpContext
またはHttpRuntime
に依存するものである必要があります。これにより、特定のホストに結び付けられます。 Web APIアプリケーションは、ホストから独立して構築する必要があります。