【问题标题】:How to cache data from repository call如何缓存来自存储库调用的数据
【发布时间】:2014-08-04 12:33:41
【问题描述】:

我正在使用 ASP.NET MVC 作为其前端客户端的多层 Web 应用程序。此 Web 应用程序的特定页面需要很长时间才能加载。大约 30 秒。

我下载了dotTrace 并在我的应用程序上运行它(在this tutorial 之后)。我发现我的应用程序很慢的原因。

事实证明,这是因为我拥有的一个特定方法做了很多工作(需要时间),而同一个方法总共被调用了 4 次。

这是来自 dotTrace 的屏幕截图,显示了上述内容:

有问题的方法是GetTasks()。因此,为了提高 Web 应用程序的速度,我想为每个请求缓存从GetTasks()返回的数据

如果我的想法是正确的,这将真正改善我遇到的速度问题。

我的问题是,我怎样才能做到这一点?我以前从来没有做过这样的事情。对于每个新请求,我如何缓存从GetTasks() 返回的数据,并将其用于所有后续对GetTasks() 的调用。

【问题讨论】:

  • 您的任务是否有某种可以识别它们的唯一标识符?
  • 是的,他们有身份证?
  • 缓存可以通常有很大帮助。还要检查的一件事是电线上实际发生了什么。查询效率高吗?我发现我的许多查询最初都很有效,需要一些调整(索引)来改进。
  • @itsmatt 谢谢,是的,这就是我接下来要做的。首先需要让缓存工作。

标签: c# asp.net-mvc-4 caching data-access-layer dottrace


【解决方案1】:

你考虑过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.
    });
}

欲了解更多信息,请参阅https://alastaircrabtree.com/the-easy-way-to-add-caching-to-net-application-and-make-it-faster-is-called-lazycache/

【讨论】:

    【解决方案2】:

    最流行的解决方案之一是缓存结果。我可以告诉你我的解决方案。 首先安装 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"); 
    }
    

    【讨论】:

    • 我在微软的一篇文章之后做了something similar,但没有得到任何性能提升。我猜我在某个地方搞砸了!
    • 如果没有 CacheManager 的代码,这个答案似乎有点不完整。
    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多