使用EF6的MVC 5:初始页面加载速度超慢

时间:2015-03-01 02:37:29

标签: c# razor model-view-controller entity-framework-6

我正在试图弄清问题是什么,我认为它与我有关,不会缓存任何数据库调用。基本上我所拥有的是一个使用EF的MVC5应用程序和大量的LINQ来进行数据库调用。

该网站是www.techiejs.com

第一次加载看起来很慢(我的意思是超过30秒)。当我做一个页面速度评估时,似乎一切都很好。是的,我没有把所有的CSS和JS缩小,但我们在谈论千字节,而不是MB,我正在使用宽带连接。缩小将是几秒钟(充其量),而不是现在需要的30秒以上。

我注意到的是,如果我访问计算机上的站点以使应用程序返回所有数据库查询,那么如果我掏出我的手机并访问该站点,它真的很快(<2秒)。但是,如果我等待大约1-5分钟并从任何设备访问该网站,我们将恢复14.4k调制解调器加载时间。

有人有什么建议吗?我在最初加载页面后获得了很棒的性能,我希望它能持续到我做一些数据库更改(比如一个新的帖子?)

也许是web.config中的东西?

也许创建一些代码,它会执行某种无用的“日志记录”,使应用程序和应用程序池工作者无限期地活着?也许每3分钟应用程序对Db进行一些随机查询?嗯......我知道这看起来很迟钝,但我没有想法大声笑。

再次感谢!

2 个答案:

答案 0 :(得分:0)

我和EF有相同的经历。您可以使用以下库来优化启动性能:

https://www.nuget.org/packages/EFInteractiveViews/

这个库可以获取模型的快照,因此当没有任何变化时(简而言之)它不需要完全重建。

众所周知,EF很慢,特别是对于大型应用程序(80多个型号)。

如果您可以访问IIS,还可以将“预加载”设置设置为启用,将“自动启动”设置为启用。您还可以最小化应用池的回收期。

在您的情况下,如果高性能是一个关键要求,我建议不要使用EF,而是使用其他一些库,如Dapper.NET或ADO.NET。

答案 1 :(得分:0)

这完全不是“EF慢”的“EF”问题。

这是启动时间,这在EF中很糟糕,但由于不能自动编译和加载整个网站的错误IIS配置而使情况更糟。 Stnadard是第一个请求启动网站应用程序。必须首先编译所有页面,然后执行所有初始化步骤然后执行页面 - 在哪个部分EF将开始添加一些秒初始化。

但是你的大部分启动时间可能都是整个“ASP.NET预编译”阶段。