【问题标题】:Reloading HttpRuntime.Cache asychronously异步重新加载 HttpRuntime.Cache
【发布时间】:2012-11-08 19:05:43
【问题描述】:

我的 ASP 网站在远程数据库上的查询速度非常慢。为了解决这个问题,我在 Application_Start 中使用缓存。

HttpRuntime.Cache["Folders"] = (from f in db.Folders select f).ToList();

在控制器中

var folderList = (List<Folder>)HttpRuntime.Cache["Folders"];

第一次加载网站需要相当长的时间,但加载后速度很快。我还使用 IIS 的新 serverAutoStart="true" 功能,因此网站始终在加载缓存的情况下运行。即使应用程序池重新启动,IIS 也会在新的 W3wp 进程中加载​​网站,并在加载新实例时切换进程。导致没有停机或启动缓慢。

但是现在我想在某些控制器操作发生时重新加载缓存。那么是否可以在不阻塞所有网站或在重新加载时触发该操作的会话的情况下异步重新加载它?另外我希望当前的 Cache["Folders"] 在操作期间仍然有效。

【问题讨论】:

    标签: caching asp.net-mvc-4


    【解决方案1】:

    您可以使用Parallel Tasks

       var repopulateCache = new System.Action(() => RepopulateCache(someParameter);
       Task.Factory.StartNew(repopulateCache);
    

    建议在使用前先了解自己在做什么,尝试阅读一些background的信息。

    也就是说,我已经在生产中使用了一段时间,它运行良好,这意味着您不必(太多)担心线程的常见危险。它会在您的网络服务器上创建后台工作,但在您的情况下,这听起来风险不大。

    【讨论】:

    • 顺便说一句,我通常有条件地这样做,例如if(asyncTasks) 基于配置设置。例如,如果您正在调试,则不想这样做,因为很难调试多个线程。
    猜你喜欢
    • 2019-01-11
    • 2020-07-31
    • 2013-10-27
    • 2019-07-11
    • 2019-06-23
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多