コード内の安全でないスレッドで発生している可能性のある問題を分析しようとしています。
私のmvc3 webapplicationでは、次のことを試みます:
// Caching code
public static class CacheExtensions
{
public static T GetOrStore<T>(this Cache cache, string key, Func<T> generator)
{
var result = cache[key];
if(result == null)
{
result = generator();
lock(sync) {
cache[key] = result;
}
}
return (T)result;
}
}
次のようにキャッシングを使用します。
// Using the cached stuff
public class SectionViewData
{
public IEnumerable<Product> Products {get;set;}
public IEnumerable<SomethingElse> SomethingElse {get;set;}
}
private void Testing()
{
var cachedSection = HttpContext.Current.Cache.GetOrStore("Some Key", 0 => GetSectionViewData());
// Threading problem?
foreach(var product in cachedSection.Products)
{
DosomestuffwithProduct...
}
}
private SectionViewData GetSectionViewData()
{
SectionViewData viewData = new SectionViewData();
viewData.Products = CreateProductList();
viewData.SomethingElse = CreateSomethingElse();
return viewData;
}
IEnumerable で inte 問題を実行できますか? スレッドの問題についてはあまり経験がありません。他のスレッドがキャッシュに新しい値を追加しても、cachedSection は変更されませんか? 私にとってこれはうまくいくでしょう!
製品とSomethingElseを個別にキャッシュする必要がありますか? SectionViewData 全体をキャッシュするよりも良いでしょうか??