【发布时间】:2018-09-17 22:27:20
【问题描述】:
这个话题已经在 stackoverflow 和许多其他博客上广泛讨论,提出问题的原因是我观察到这个话题在大多数 3 到 5 年前的帖子中讨论过,而我们现在有 EF 6.2 版本,我希望这可能有已经更新(您会发现更多原因。
我的应用程序至少有 25 个模型(表),其中 MySQL 作为数据库,模型和关系在 OnModelCreating 中配置,网站托管在 godaddy 上,我无法很好地访问 IIS 配置等。
页面加载时间
- 首页加载时间:65 到 70 秒
- 第二页加载:1 到 3 秒
再次延迟 10 分钟后,加载页面需要 70 秒。 请注意,我在不同的环境中对其进行了测试,例如使用不同的互联网连接。 页面没有图片,测试页面只有5行2列数据(调用简单方法db.Test.ToList();)
在搜索互联网时,我发现这是 EF 的常见问题,所以我尝试修复它,同时从帖子 3 Steps for Fast EntityFramework 和 Pregenerate Model and View Cache 获得帮助
修复后
- 首页加载时间:64 到 67 秒
-
第二页加载:1 到 3 秒
// DbConfiguration constructor public MyDbConfiguration { var path = Path.GetDirectoryName(this.GetType().Assembly.Location); SetModelStore(new DefaultDbModelStore(path)); } // DbContext private static DbMappingViewCacheFactory viewCacheFactory; private static DbMappingViewCacheFactory ViewCacheFactory { get { if (viewCacheFactory == null) { var path =ConfigurationManager.AppSettings[GlobalContextConfig.EFCacheFolder]; viewCacheFactory=new FileViewCacheFactory(path+"Budget.Context.MyDbContext.xml"); } return viewCacheFactory; } } public MyDbContext() : base("name=MySqlConnectionString") { // In case i need to update xml for now i delete the old file manually InteractiveViews.SetViewCacheFactory(this, ViewCacheFactory); Database.SetInitializer<MyDbContext>(null); this.Configuration.ProxyCreationEnabled = false; this.Configuration.LazyLoadingEnabled = false; this.Configuration.AutoDetectChangesEnabled = false; this.Configuration.ValidateOnSaveEnabled = false; }
已经改进但还不够,我想知道这些问题是否在 EF 6.2.0 中更新或修复它的方法已更改,或者我做错了什么/应该检查。
我还安装了 EF 6.1.X 并通过右键单击 Contaxt 文件并在手册中选择 Entity Framework > Generate View 来生成视图
结果:
- 首页加载时间:40 到 50 秒
- 第二页加载:0 到 1.5 秒
太神奇了,EF 6.1.X 比 EF 6.2 快很多
使用 debug=false 构建和部署为 Release 包
出于测试目的,我还上传了没有实体框架的asp.net应用程序,第一次加载需要8到13秒,第二次加载不到1秒
【问题讨论】:
-
你有没有解决这个问题?我有同样的问题,初始启动非常缓慢。
-
如果你的网站是第三方网站,比如godaddy,那真的很难,我还在努力。如果您在本地托管,那么它不应该花费太长时间。将上下文划分为多个上下文,例如销售、客户等。禁用调试,不要使用延迟加载,关闭自动检测更改,有很多帖子描述不同的事情,
标签: asp.net-mvc entity-framework entity-framework-6 linq-to-entities