アプリケーション キャッシュを使用して、ASP.net 3.5 Web サイトにアプリケーション全体のフィードを作成したいと考えています。キャッシュに入力するために使用しているデータの取得は遅く、おそらく最大 10 秒 (リモート サーバーのデータ フィードから) です。私の質問/混乱は、キャッシュ管理を構築するための最良の方法は何かということです。
private const string CacheKey = "MyCachedString";
private static string lockString = "";
public string GetCachedString()
{
string data = (string)Cache[CacheKey];
string newData = "";
if (data == null)
{
// A - Should this method call go here?
newData = SlowResourceMethod();
lock (lockString)
{
data = (string)Cache[CacheKey];
if (data != null)
{
return data;
}
// B - Or here, within the lock?
newData = SlowResourceMethod();
Cache[CacheKey] = data = newData;
}
}
return data;
}
実際のメソッドは、HttpHandler (.ashx) によって提示されます。
ポイント「A」でデータを収集すると、ロック時間を短く保ちますが、外部リソースを何度も呼び出すことになる可能性があります (すべての Web ページからフィードを参照しようとします)。ポイント「B」に置くと、ロック時間が長くなりますが、これは悪いことだと思います。
最善のアプローチは何ですか、または使用できるより良いパターンはありますか?
アドバイスをいただければ幸いです。