【问题标题】:Cache seems really slow缓存似乎真的很慢
【发布时间】:2012-03-12 15:25:26
【问题描述】:

我有这段缓存代码

public static ICollection<Messages> GetMessages()
{
    if (System.Web.HttpContext.Current.Cache["GetMessages_" + user_id] == null)
    {
        using (DataContext db = new DataContext())
        {
            var msgs = (from m in db.Messages 
                        where m.user_id == user_id 
                        && m.date_deleted == null                
                        select m).ToList();

            System.Web.HttpContext.Current.Cache.Insert(
                "GetMessages_" + user_id, msgs, null, 
                 DateTime.Now.AddMinutes(5), TimeSpan.Zero);
        }
    }
    return System.Web.HttpContext.Current.Cache["GetMessages_" + user_id] 
               as ICollection<Messages>;
}

第一次运行时,它从一个 SQL 表中拉取数据,大约需要 1500 毫秒。每次后续调用大约需要 600 毫秒。我正在测试的集合目前只包含 3 个对象,每个对象的数据最少(一个字符串、3 个日期时间字段、3 个布尔值和 5 个整数)

这正常吗?每次加载一个包含如此少量数据的页面几乎需要 2 秒。

[仅供参考,这只是在开发机器上运行,而不是完全成熟的 Web 服务器。正在从远程服务器提取数据,但这只会影响初始页面加载]

【问题讨论】:

  • 您在 VS 开发 Web 服务器中运行它时是否偶然注意到这种缓慢?
  • 是的...这可能是问题吗?
  • 当然调试会慢一些,开发web服务器也不会有IIS的性能,但是我看到很多抱怨它有多慢,经验丰富我自己。您可以查看以下内容:stackoverflow.com/questions/5237340/…stackoverflow.com/questions/4264100/…
  • @HackedByChinese,好东西!你介意把它变成一个答案吗?希望 roryok 会接受。
  • 是的,如果你发布它,我会接受。

标签: c# asp.net-mvc linq caching razor


【解决方案1】:

请记住,当您在 EF 代码优先方法中创建第一个上下文时 - EF 必须从元数据重建模型,这会减慢第一次调用。

【讨论】:

    【解决方案2】:

    正如 HackedByChinese 所指出的,这是在 VS 开发 Web 服务器中运行的,这当然会减慢速度。但是,我确实发现我的编程风格导致加载时间非常慢。

    我使用上述方法加载缓存的消息集合,也使用类似方法从数据库中拉回其他实体。其中一项是“设置”对象。

    在设置页面上,我每次想要返回属性时都会调用该函数。例如Cache.GetSettings().username,然后是Cache.GetSettings().useremail 等。我认为这会使应用程序运行得更快一些,因为它每次都从缓存中检索对象,而无需访问数据库。但显然,缓存不如内存快。每个调用大约需要半秒(在本地服务器上),在远程服务器上可能需要 0.1 秒或 0.2 秒。我意识到如果我将它设置为一个变量......

    var settings = Cache.GetSettings();
    

    并引用了这一点,加载时间显着下降。这条线有一个 0.5 秒的负载,然后每次对设置的后续引用都没有花费时间。

    总而言之,是的,缓存可能很慢,但前提是您像我一样以愚蠢的方式使用它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多