Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓存看起来真的很慢_C#_Asp.net Mvc_Linq_Caching_Razor - Fatal编程技术网

C# 缓存看起来真的很慢

C# 缓存看起来真的很慢,c#,asp.net-mvc,linq,caching,razor,C#,Asp.net Mvc,Linq,Caching,Razor,我有一段缓存代码 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

我有一段缓存代码

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>;
}
publicstaticicollection GetMessages()
{
if(System.Web.HttpContext.Current.Cache[“GetMessages”+用户id]==null)
{
使用(DataContext db=newdatacontext())
{
var msgs=(从m到db.Messages)
其中m.user\u id==user\u id
&&m.date_deleted==null
选择m.ToList();
System.Web.HttpContext.Current.Cache.Insert(
“GetMessages”+用户id,msgs,null,
DateTime.Now.AddMinutes(5),TimeSpan.Zero);
}
}
return System.Web.HttpContext.Current.Cache[“GetMessages”+用户id]
作为i集合;
}
第一次运行时,它从SQL表中提取数据,大约需要1500毫秒。随后的每次调用大约需要600毫秒。我正在测试的集合目前只包含3个对象,每个对象都有最少的数据(一个字符串、3个datetime字段、3个bool和5个int)

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


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

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

正如HackedByChinese所指出的,这是在VS development web服务器中运行的,当然会降低速度。然而,我确实发现我的编程风格是非常缓慢的加载时间

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

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

var settings = Cache.GetSettings();
相反,加载时间显著下降。这一行只有一个0.5s的负载,随后对设置的每次引用都不花费任何时间


总之,是的,缓存可能会很慢,但前提是你像我一样愚蠢地使用它

在VS development web服务器上运行时,您是否碰巧注意到了这种缓慢现象?是的。。。这可能是问题所在吗?当然,调试速度会变慢,开发web服务器的性能也不会达到IIS的水平,但是,我看到了很多关于它有多慢的抱怨,我自己也经历过。有几件事你可以研究一下:还有@HackedByChinese,好东西!你介意把这变成一个答案吗?希望罗约克会接受。是的,如果你把它贴出来,我会接受的。