【发布时间】:2016-05-18 18:38:14
【问题描述】:
我将数据存储在缓存中,以免经常访问数据库(数据是否有点陈旧也没关系),数据集不是特别大,但由于操作的复杂性,操作可能需要一些时间查询(很多连接和子查询)。我有一个静态助手类,数据用于绑定单个页面。页面这样称呼它:
public static List<MyList> MyDataListCache
{
get
{
var myList = HttpContext.Current.Cache["myList"];
if (myList == null)
{
var result = MyLongRunningOperation();
HttpContext.Current.Cache.Add("myList", result, null, DateTime.Now.AddMinutes(3),
Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
return result;
}
}
else
{
return (List<MyList>)myList;
}
}
}
这很好用,除非当项目超出缓存时很多人同时点击该页面。数百个 LongRunningOperations 启动并导致应用程序崩溃。我该如何避免这个问题?如果任务当前正在运行,我已经尝试使用异步任务订阅,但没有让它工作。
【问题讨论】: