最近的项目中一直有反馈,EF在第一次启动之后调用的话,加载速度很慢,在网上搜索了一下,基本就是三种解决方案。

  1. 在程序启动的时候将映射视图缓存下来。
  2. 使用Ngen生成EF的本地镜像。
  3. IIS8内置功能 application Initialization,或者设置IIS的休眠时间(该条和EF已经没多大关系了)

三种办法的具体实施步骤,在网上都能搜索的到。

本次主要想描述一下第一种方法,在网上基本都是提供自己缓存映射视图的方法,总感觉不太好,提供的代码如下:

1 using (var dbcontext = new MyDbContext())
2 {
3 var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
4 var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
5 mappingCollection.GenerateViews(new List<EdmSchemaError>());
6 }

目的很明确,将DbContext中的视图读取并生成。其实在EF6.2发布的时候,已经解决了该类的问题。问题地址如下 https://github.com/aspnet/EntityFramework6/issues/275

方法很简单,使用代码配置,(官方说明:https://docs.microsoft.com/zh-cn/ef/ef6/fundamentals/configuring/code-based),新建MyDbConfiguration类,并且继承DbConfiguration。

1 public class MyDbConfiguration : DbConfiguration
2 {
3 public MyDbConfiguration() : base()
4 {
5 var path = Path.GetDirectoryName(this.GetType().Assembly.Location);
6 SetModelStore(new DefaultDbModelStore(path));
7 }
8 }

之后再使用的上下文类上打上属性[DbConfigurationType(typeof(MyDbConfiguration))]

1 [DbConfigurationType(typeof(MyDbConfiguration))]
2 public class MyContextContext : DbContext
3 {
4 }

并且在项目启动的时候,需要手动初始化,即

1 using (var dbContext = new MyContextContext())
2 dbContext.Database.Initialize(true);

刚开始没有手动初始化,所以在启动的时候一直不生成edmx文件。之后再启动的时候,在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\openapi\caafd260\cddc743d\assembly\dl3路径下会生成随机的文件名,在该随机文件下,生成exmx文件。后续在启动的时候,加载时间缩短一般。(更新前大概是3.5s,更新后为1.5s左右,和表的数量有直接关系),并且在IIS休眠之后调用,速度也大大加快。

以上的代码只适应于EF6.2以上版本。6.2一下的版本可参考链接 https://entityframework.net/why-first-query-slow

参考:

https://codeopinion.com/entity-framework-code-first-model-cache/

https://gist.github.com/davidroth/9886349 手动管理exmx文件,和上述代码的区别是,上述代码每次启动都会更新,该方法会根据时间戳判断是否需要更新。

https://stackoverflow.com/questions/52376465/entity-framework-6-2-very-slow-first-startup-and-efinteractiveviews/52405059#52405059

EF6.2加载速度慢的解决方案的更多相关文章

  1. Web前端性能优化——如何有效提升静态文件的加载速度

    WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页 ...

  2. 【Android优化篇】提升Activity加载速度的方法

    文章转自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan 前言 这个也是我面试遇到的问题,当时只回答了一种情况,异步加载数据,没想到别的方式,回来 ...

  3. web前端性能优化,提升静态文件的加载速度

    原文地址:传送门 WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标. ...

  4. vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

    # vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...

  5. vue 页面首次加载缓慢原因及解决方案

    第一次打包vue的项目部署到服务器,发现首次加载特别的缓慢要几十秒才加载出来,完全没有在本地开发环境上那么流畅. 主要原因是页面在打包后没有进行相关的配置导致资源文件特别大,一次想要全部加载完成回特别 ...

  6. TB级倾斜模型加载速度太慢?这是我见过最快的加载方式没有之一

    随着无人机性能快速提升,单个项目涉及到的倾斜摄影模型数据范围.数据量及单个模型体积也在不断变大,带来的问题是数据显示速度却越来越慢,那么如何在不升级配置的情况下提升模型的加载速度呢?   TB级倾斜摄 ...

  7. 浅析用Base64编码的图片优化网页加载速度

    想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种 ...

  8. 解决JS加载速度慢

    在网页中的js文件引用会很多,js引用通常为 <script src="xxxx.js"></script> 通过如下方法可以增加js加载速度 <sc ...

  9. 优化JavaScripe 提升首页加载速度的几种方案解析

    优化目的: 1. 减少load量. 2. 优化js,加快页面加载速度. 网站中最影响网站打开速度的是什么?我会告诉是网站中的javascript,简称JS.模板中引用的JS文件越多,打开速度越慢,细读 ...

随机推荐

  1. 对接口报错404 发现url多了一些不可描述的代码%E2%80%8B

    接口url出现了空格,复制的url可能出现空格肉眼看不出来,手动输入一遍URL

  2. 设计模式之委派模式(Delegate Pattern)深入浅出

    学习目标:精简程序逻辑,提升代码的可读性. 内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群. 委派模式定义: 委派模式(Delegate Pattern)的基本作用是负责任务的调度 ...

  3. 【JavaWeb】Cookie&Session

    Cookie&Session Cookie 什么是 Cookie Cookie 即饼干的意思 Cookie 是服务器通知客户端保存键值对的一种技术 客户端有了 Cookie 后,每次请求都发送 ...

  4. CPNDet:粗暴地给CenterNet加入two-stage精调,更快更强 | ECCV 2020

    本文为CenterNet作者发表的,论文提出anchor-free/two-stage目标检测算法CPN,使用关键点提取候选框再使用两阶段分类器进行预测.论文整体思路很简单,但CPN的准确率和推理速度 ...

  5. zabbix客户端安装配置

    1.下载,解压并安装zabbixtar zxvf zabbix-2.0.12.tar.gzcd zabbix-2.0.12./configure --prefix=/usr/local/zabbix ...

  6. 中断与系统调用深度分析(以网络编程接口SocketAPI为例)

    1.从计算机CPU与I/O设备的交互方式谈起 计算机CPU与I/O设备的交互方式有最早的程序查询(也叫轮询)方式,发展到后来的程序中断方式,DMA方式等.简单来说,最早的程序查询方式的机制是,CPU若 ...

  7. 2020 CSP&NOIP 游记

    CSP初赛 CSP初赛 Day -1 早上打了模拟赛,T2寒假正好做过,然而还是还是被踩Orz,郑外NB!.中午出校吃了大盘鸡和拉面,还带回来了三瓶可乐. 初赛知识点看了两页不(看)想(不)看(懂)了 ...

  8. 前端面试之JavaScript中this的指向【待完善!】

    JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...

  9. JMeter性能测试9:阿里云服务器压测

    第一步准备好jmeter脚本 第二步 将本地的jmeter脚本上传到阿里云进行验证 检验阿里云的jmeter是否能正常运行 将本地的脚本上传到阿里云使用xshell进入到该目录下 使用命令运行刚才上传 ...

  10. 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。

    1 import java.text.SimpleDateFormat; 2 3 import org.apache.hadoop.fs.FSDataOutputStream; 4 import or ...