缓存似乎真的很慢
本文关键字:真的 缓存 | 更新日期: 2023-09-27 18:27:35
我有一段缓存代码
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个bool和5个int)
这正常吗?每次加载一个包含如此少量数据的页面几乎需要2秒。
[仅供参考,这只是在开发机器上运行,而不是在成熟的web服务器上。数据是从远程服务器提取的,但这只会影响初始页面加载]
请记住,当您在EF代码优先方法中创建第一个上下文时,EF必须从元数据重建模型,这会减慢第一次调用的速度。
正如HackedByChinese所指出的,这是在VS开发web服务器中运行的,这当然会减慢速度。然而,我确实发现我的编程风格适用于非常慢的加载时间。
我使用上面的方法加载了一个缓存的消息集合,还使用了类似的方法从数据库中提取其他实体。其中一个项目是"设置"对象。
在设置页面上,每当我想返回一个属性时,我都会调用该函数。例如Cache.GetSettings().username
,然后是Cache.GetSettings().useremail
等。我认为这会使应用程序运行得更快,因为它每次都从缓存中检索对象,而不需要访问数据库。但显然,缓存不如内存快。每次调用(在本地服务器上)大约需要半秒钟,在远程服务器上可能需要.1s或.2s。我意识到如果我把它设置为一个变量。。。
var settings = Cache.GetSettings();
并提到,相反,加载时间显著下降。在这条线上有一个0.5秒的负载,然后每次对设置的引用都不需要任何时间。
总之,是的,缓存可能很慢,但前提是你像我一样以愚蠢的方式使用它!