[英]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.