【问题标题】:Entity Framework Code First 30+ seconds StartUp Time实体框架代码前 30+ 秒启动时间
【发布时间】:2015-06-18 03:07:48
【问题描述】:

我知道这个问题被问了太多次,但我无法从所问的问题中找出解决方案。

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

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

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

这些是命令提示符的行:

1 - netsh int ip 重置 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;
    }

我创建了自定义方法来获取我的数据(这样我可以更轻松地使用它们),在一个“工人”类下将我的所有方法收集到一个类中。会不会是这个问题?

我很乐意提供您需要的任何更多信息,我已经处理了大约一个月,但没有运气,所以我绝望地寻找答案,否则我将不得不重新创建整个应用程序EF,因为客户不会等待打开时间为 +30 秒的网站。

提前感谢您的所有建议!

【问题讨论】:

  • 问题很可能与迁移有关。您是否仍在积极处理您必须进行迁移的应用程序?每次应用程序第一次启动时,都必须检查 __migrationHistory;如果您的应用不再主动更改,那么禁用迁移或将基线迁移从空数据库中的单个当前迁移应该会有所帮助。
  • 嗨@Claies,非常感谢你这么快:) 我只在内容方面处理我的应用程序,所以很长时间以来数据库都没有变化。我删除了我的迁移历史表和迁移文件夹并再次发布了网站,请问您是否可以检查它是否已解决?我现在看起来更快了

标签: c# performance entity-framework code-first startup


【解决方案1】:

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

using(var context = new DbContext())
{
    context.Database.Initialize(false);
}

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

<applicationInitialization>
  <add initializationPage="/initialze" />
</applicationInitialization>

这些步骤不会完全预热 Entity Framework,但会大大减少冷启动时间。

【讨论】:

  • 您好 Ranquild,非常感谢您的回答。我初始化了我的 ef 数据库,但对于您的其余建议,我使用的是共享托管服务器。我不确定我是否可以访问您提到的那些设置。我还能在共享主机中进行这些更改吗?谢谢:)
  • 初始化 ef 数据库应该足够了。对于其他更改,它是确定的应用程序重启。
  • 好的,我再次发布了我的网站,但它似乎打开速度很慢,比之前快一点。请问您是否可以检查它是如何在您的浏览器上打开的?谢谢!
  • 在 Chrome 开发者控制台中检查,似乎是前端问题 - 图像尺寸太大。无论如何,您应该首先分析您的网站(使用 Chrome、Firefox 或其他浏览器开发工具)并提出另一个问题。
  • 嗯,我明白了,但我确实优化了图像。我知道它们的尺寸很大,但例如这是我几年前制作的另一个网站 www.viagrupinsaat.com.tr 没有优化任何图像,而且它的打开速度比这个更快?那么从这一点来看,问题肯定出在前端?我问这个,所以我可以专注于解决这个问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多