9
.NET MemoryCacheを適切に使用するためのロックパターン
このコードには同時実行の問題があると思います: const string CacheKey = "CacheKey"; static string GetCachedData() { string expensiveString =null; if (MemoryCache.Default.Contains(CacheKey)) { expensiveString = MemoryCache.Default[CacheKey] as string; } else { CacheItemPolicy cip = new CacheItemPolicy() { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(20)) }; expensiveString = SomeHeavyAndExpensiveCalculation(); MemoryCache.Default.Set(CacheKey, expensiveString, cip); } return expensiveString; } 並行性の問題の理由は、複数のスレッドがnullキーを取得してから、データをキャッシュに挿入しようとする可能性があるためです。 このコードの同時実行性を証明する最も簡単でクリーンな方法は何でしょうか?私はキャッシュ関連のコード全体で良いパターンに従うのが好きです。オンライン記事へのリンクは非常に役立ちます。 更新: @Scott Chamberlainの回答に基づいてこのコードを思いつきました。誰かがこれでパフォーマンスまたは同時実行の問題を見つけることができますか?これがうまくいけば、コードやエラーの多くの行を節約できます。 …