1

我有一个对远程数据库的查询非常慢的 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"] 在操作期间仍然有效。

4

1 回答 1

1

您可以使用并行任务

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

建议在使用此之前了解您在做什么,尝试阅读一些背景信息。

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

于 2012-11-08T11:05:43.043 回答