ASP.NET Cache - 长时间运行的操作

时间:2016-05-18 10:28:41

标签: c# asp.net caching

我将数据存储在缓存中是为了不经常访问数据库(如果数据有点过时并不重要),数据集不是特别大但操作可能需要一些时间由于查询的复杂性(很多联接和子查询)。我有一个静态助手类,数据用于绑定各个页面。该页面调用它如下:

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被启动并导致应用程序崩溃。我该如何避免这个问题?我已经尝试使用异步任务来订阅,如果任务当前正在运行,但没有运气让它工作。

1 个答案:

答案 0 :(得分:1)

启动此服务后,您应立即调用LongRunningOperation()来预热缓存。

其次,你总是希望返回一些东西,所以我会考虑一个后台任务来在它到期之前刷新它。

做这两件事会使你描述的情况无效。缓存将由后台工作者刷新,因此每个人都很高兴:)