实体框架代码首次启动时间超过30秒

TC *_*gül 6 c# performance entity-framework startup code-first

我知道这已被问了太多次,但我无法从问题中找到解决方案.

我是Entity Framework的新手,我使用Entity Framework 6和Code First方法为我的网站开发了一个小型CMS面板.我的问题是,首次运行时网站速度很慢(这是我目前正在测试的网站www.oakwoodpawnshop.ca),加载需要30秒以上.第一次加载后,加载其他页面大约需要一秒钟.我从PageSpeed见解得到89/100,我的所有images/js/css文件都被最小化,并做了一些其他的前端优化,所以我知道我的问题在于EF.我有大约3年前建立的另一个网站,只使用LINQ,没有数据库优化或html /图像优化,它在大约3秒内打开.

我使用Entity Framework Power Tools预先生成了视图,我的代码中没有任何Include方法.我在.toList()函数之前过滤了我的查询.我的代码或数据库优化可能有问题,但我无法通过我的研究得出解决方案,因为这个领域对我来说是新的.

我发现一篇用我母语的文章,要求有相同问题的人在命令提示符下运行一些代码,看看问题是否与网络设置有关.

这些是命令提示符的行:

1 - netsh int ip reset a.txt

2 - netsh winsock重置

3 - netsh winhttp重置代理

4 - netsh advfirewall重置

5 - ipconfig/flushdns

6 - 重新启动计算机并再次检查.

当我这样做并检查回网站时,整个网站在3秒内打开.过了一会儿,它又开始有30多秒的启动时间了.显然我无法在每个人的计算机上运行这些命令,但我迷失了,我不知道为什么要花这么长时间才能开始.

这是我正在使用的方法的示例:

public List<Categories> GetCategories()
    {
        List<Categories> c = db.Categories.Where(x => x.TopCategoryId == 0).OrderBy(x => x.CatOrder).ToList();

        return c;
    }
Run Code Online (Sandbox Code Playgroud)

我创建了自定义方法来获取我的数据(所以我可以更容易地使用它们),在'Worker'类下,在一个类中收集我的所有方法.这可能是问题吗?

我很乐意提供您需要的更多信息,我现在处理这个问题大约一个月没有运气,所以我无可救药地寻找答案,或者我将不得不重新创建没有EF的整个应用程序,因为客户无法等待具有+30秒开放时间的网站.

提前感谢您的所有建议!

ran*_*ild 1

您可以初始化实体框架数据库。将 DbContext 替换为您的上下文类:

using(var context = new DbContext())
{
    context.Database.Initialize(false);
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 asp.net mvc,则可以通过 Application_Start() 方法执行此操作。但是,您需要使用应用程序初始化模块(可作为 IIS 7.5 的扩展)。修改应用程序池条目,使应用程序池始终处于运行状态。删除空闲超时。配置在特定时间(例如 04:00 AM)回收 IIS 应用程序池。您可能需要在 Web.config 中指定初始化页面(默认为“/”):

<applicationInitialization>
  <add initializationPage="/initialze" />
</applicationInitialization>
Run Code Online (Sandbox Code Playgroud)

这些步骤不会完全预热实体框架,但会大大减少冷启动时间。