EF6.2加载速度慢的解决方案
最近的项目中一直有反馈,EF在第一次启动之后调用的话,加载速度很慢,在网上搜索了一下,基本就是三种解决方案。
- 在程序启动的时候将映射视图缓存下来。
- 使用Ngen生成EF的本地镜像。
- 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文件,和上述代码的区别是,上述代码每次启动都会更新,该方法会根据时间戳判断是否需要更新。
EF6.2加载速度慢的解决方案的更多相关文章
- Web前端性能优化——如何有效提升静态文件的加载速度
WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页 ...
- 【Android优化篇】提升Activity加载速度的方法
文章转自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan 前言 这个也是我面试遇到的问题,当时只回答了一种情况,异步加载数据,没想到别的方式,回来 ...
- web前端性能优化,提升静态文件的加载速度
原文地址:传送门 WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标. ...
- vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案
# vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...
- vue 页面首次加载缓慢原因及解决方案
第一次打包vue的项目部署到服务器,发现首次加载特别的缓慢要几十秒才加载出来,完全没有在本地开发环境上那么流畅. 主要原因是页面在打包后没有进行相关的配置导致资源文件特别大,一次想要全部加载完成回特别 ...
- TB级倾斜模型加载速度太慢?这是我见过最快的加载方式没有之一
随着无人机性能快速提升,单个项目涉及到的倾斜摄影模型数据范围.数据量及单个模型体积也在不断变大,带来的问题是数据显示速度却越来越慢,那么如何在不升级配置的情况下提升模型的加载速度呢? TB级倾斜摄 ...
- 浅析用Base64编码的图片优化网页加载速度
想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种 ...
- 解决JS加载速度慢
在网页中的js文件引用会很多,js引用通常为 <script src="xxxx.js"></script> 通过如下方法可以增加js加载速度 <sc ...
- 优化JavaScripe 提升首页加载速度的几种方案解析
优化目的: 1. 减少load量. 2. 优化js,加快页面加载速度. 网站中最影响网站打开速度的是什么?我会告诉是网站中的javascript,简称JS.模板中引用的JS文件越多,打开速度越慢,细读 ...
随机推荐
- gin框架的路由源码解析
前言 本文转载至 https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/ 可以直接去原文看, 比我这里直观 我这里只是略微的修改 正文 gin的 ...
- 跨域的几种方式以及call(),apply() bind()方法的作用和区别
jsonp: jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的一种非官方跨域数据交互协议. 一个是描述信息的格式,一个是信息传递 ...
- HAProxy-1.8.20 根据后缀名转发到后端服务器
global maxconn 100000 chroot /data/soft/haproxy stats socket /var/lib/haproxy/haproxy.sock mode 600 ...
- 基于Python开发数据宽表实例
搭建宽表作用,就是为了让业务部门的数据分析人员,在日常工作可以直接提取所需指标,快速做出对应专题的数据分析.在实际工作中,数据量及数据源繁多,如果每个数据分析人员都从计算加工到出报告,除了工作效率巨慢 ...
- Java 基于 mysql-connector-java 编写一个 JDBC 工具类
用到的 jar 包 jar包地址: mysql-connector-java-5.1.47.jar junit-4.13.jar Maven: <!-- mysql驱动 --> <d ...
- 为啥使用innodb_flush_method=o_direct 就能减轻io压力呢
为啥使用innodb_flush_method=o_direct 就能减轻io压力呢
- Pandas应用案例-股票分析:使用tushare包获取股票的历史行情数据进行数据分析
目标: 使用tushare包获取股票的历史行情数据 输出该股票所有收盘比开盘上涨3%以上的日期 输出该股票所有开盘比前日收盘跌幅超过2%以上的日期 假如为我们从2010年1月1日开始,每月第一个交易日 ...
- Java入门者:如何写出美观的Java代码?
前言 在帮助各位同学远程解决代码问题的时候,发现很多同学的代码都有一个共同问题:代码书写格式不规范.虽然代码书写规范对程序性能及运行并不影响,但影响着别人对你编程习惯或能力的第一印象,同时也会给阅读者 ...
- k8s之PV、PVC、StorageClass详解
导读 上一篇写了共享存储的概述以及一个简单的案例演示.这一篇就写一下PV和PVC. PV是对底层网络共享存储的抽象,将共享存储定义为一种"资源",比如Node也是容器应用可以消费的 ...
- CentOS 镜像下载地址
CentOS镜像地址:http://isoredirect.centos.org/altarch/7/isos/i386/