我正在使用ASP.NET MVC作为其前端客户端的多层Web应用程序。此Web应用程序的特定页面需要很长时间才能加载。大约30秒。
我下载了dotTrace并在我的应用程序上运行了它(this tutorial之后)。我发现我申请的原因很慢。
事实证明,这是因为我所拥有的一种特殊方法会耗费大量工作(需要时间),并且相同的方法总共被调用了4次。
以下是dotTrace的截图,显示了上述内容:
有问题的方法是GetTasks()
。因此,为了提高Web应用程序的速度,我希望缓存每个请求从GetTasks()
返回的数据。
如果我的想法是正确的,这将真正改善我所遇到的速度问题。
我的问题是,我怎样才能做到这一点?我以前从未做过这样的事情。对于每个新请求,我如何缓存从GetTasks()
返回的数据,并将其用于对GetTasks()
的所有后续调用。
答案 0 :(得分:0)
最流行的解决方案之一是缓存结果。我可以告诉你我的解决方案。 首先安装Nuget包:LazyCache 然后你可以使用我创建了包装器的包装器:code。您可以提取和界面或其他任何内容。
然后你可以像这样使用它:
private readonly CacheManager cacheManager = new CacheManager();
// or injected via ctor
public IEnumerable<Task> GetTasks()
{
return this.cacheManager.Get("Tasks", ctx => this.taskRepository.GetAll());
}
public void AddTask(Task task)
{
this.taskRepository.Create(task);
/// other code
// we need to tell the cache that it should get fresh collectiion
this.cacheManager.Signal("Tasks");
}
答案 1 :(得分:0)
您是否考虑过Cache Aside pattern?
您可以使用LazyCache
轻松实现它//probably in my constructor (or use dependency injection)
this.cache = new CachingService()
public List<MyTasks> GetTasks()
{
return cache.GetOrAdd<List<MyTasks>>("get-tasks", () = > {
//go and get the tasks here.
});
}