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文件越多,打开速度越慢,细读 ...
随机推荐
- 20210107 - python 的Excel自动化
1.前置条件:用python, 开发工具pycharm 2.安装包: pip install openpyxl, 该包支持:xlsx, 但是不支持xlrd.xlwt格式的文件 3.概念介绍: 一个e ...
- CS系统中分页控件的制作
需求:在一个已有的CS项目(ERP中),给所有的列表加上分页功能. 分页的几个概念: 总记录数 totalCount (只有知道了总记录数,才知道有多少页) 每页记录数 pageSize (根据总 ...
- 基于 MPI/OpenMP 混合编程的大规模多体(N-Body)问题仿真实验
完整代码: #include <iostream> #include <ctime> #include <mpi.h> #include <omp.h> ...
- 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)
Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...
- 给mysql选择调度策略
在gun/linux上,队列调度决定了到块设备的请求实际上发送到底层设置的顺序.默认情况下是cfg(完全公平排队)策略,随意使用的笔记本和台式机使用中个调度策略没有问题,并且有助于防止io饥饿,但是用 ...
- 【MySql】[ERROR] Can't read from messagefile '/usr/share/mysql/english/errmsg.sys'
[root@zhang bin]# ./mysql_install_db --datadir=/usr/local/mysql/mydata/data/ 2018-08-18 03:09:14 [WA ...
- js reduce数组转对象
借鉴:https://juejin.im/post/5cfcaa7ae51d45109b01b161#comment这位大佬的处理方法很妙,但是我一眼看过去没有明白,细细琢磨了下,终于明白了 1 co ...
- 【Android】关于连续多次点击控件的控制方案(新建监听类)
参考:防止Android过快点击造成多次事件的三种方法_胖胖的博客-CSDN博客 实现逻辑很简单: 设置限定时间 在用户点击时开始计时 若计时未超过限定时间,则不允许触发点击事件 因还未学习过Rxja ...
- 使用Spring的RestTemplate进行接口调用
引自:http://www.zimug.com/ 1.常见的http服务的通信方式 经常使用的方式有HttpClient.OkHttp.RestTemplate.其中RestTemplate是一种更优 ...
- CMU数据库(15-445)-实验2-B+树索引实现(中)删除
3. Delete 实现 附上实验2的第一部分 https://www.cnblogs.com/JayL-zxl/p/14324297.html 3. 1 删除算法原理 如果叶子结点中没有相应的key ...