我的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 [“文件夹”]在操作期间仍然有效。
答案 0 :(得分:1)
您可以使用Parallel Tasks
var repopulateCache = new System.Action(() => RepopulateCache(someParameter);
Task.Factory.StartNew(repopulateCache);
建议您在使用之前了解自己在做什么,尝试阅读一些background信息。
那就是说,我已经在生产中使用了一段时间并且它运行良好并且意味着您不必担心(太多)线程的常见危险。它将在您的Web服务器上创建后台工作,但在您的情况下,它听起来不是一个很大的风险。