[英]ASP.NET cache issue
我正在緩存MyData
以避免不必要的對Web服務的調用,但是似乎存在一些問題。 緩存可能正常工作,但是我無法弄清楚是什么原因引起的。 這就是我緩存數據的方式。 我使用靜態緩存幫助器。 如果您需要這段代碼,則可以使用Google“緩存幫助器c#”。
private static object locker = new object();
private static List<SomeDataDto> myData;
private static List<SomeDataDto> MyData{
get{
if (CacheHelper.Exists("MyData") == false){
lock (locker){
if (CacheHelper.Exists("MyData") == true){
myData=(List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
}
else
if (CacheHelper.Exists("MyData") == false){
var myData = GetSomethingFromDatabase("en", true);
CacheHelper.Add(myData, "MyData", 360);
}
}
}
return (List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
}
}
我在頁面上調用此方法,並且此方法引發錯誤(有時!)
public SomeObjectToReturn GetOneItem(string language, string id)
{
return MyData.Where(x => x.Language == language.ToUpper()).SelectMany(x => x.Something).SelectMany(x => x.SomethingElse).Where(x => x.ID == id).FirstOrDefault();
}
我為15個不同的id調用此方法15次,但它適用於10個項目或8個項目或類似的項目。 如果我編輯配置以刪除緩存,則其他某些ID將無法正常工作。 所以:
緩存損壞了嗎? Web Service是否不返回列表中的所有元素? (太多嗎?)
您必須包含返回(List)CacheHelper.GetCacheObject(“ MyData”); 在您的鎖中像:
get{
lock (locker){
if (CacheHelper.Exists("MyData") == false){
if (CacheHelper.Exists("MyData") == true){
myData=(List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
}
else
if (CacheHelper.Exists("MyData") == false){
var myData = GetSomethingFromDatabase("en", true);
CacheHelper.Add(myData, "MyData", 360);
}
}
return (List<SomeDataDto>)CacheHelper.GetCacheObject("MyData");
}
}
如果在編寫或刪除時閱讀,則行為可能與您預期的不同。 List對象不是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.