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文件越多,打开速度越慢,细读 ...
随机推荐
- 壁球小游戏详解(附有源码.cpp)
1.在python中安装pygame 2.将下列源码复制过去,运行. #引用 import pygame, sys #初始化 pygame.init() size = width, height = ...
- spring cache 学习——@CachePut 使用详解
1. 功能说明 当需要在不影响方法执行的情况下更新缓存时,可以使用 @CachePut,也就是说,被 @CachePut 注解的缓存方法总是会执行,而且会尝试将结果放入缓存(当然,是否真的会缓存还跟一 ...
- 想学Python不知如何入门,教你!
一.入门引导 想必有很多小伙伴想学习Python,又不知道如何入门,总觉得学习一定要头悬梁,锥刺股!NO,今天给大家分享下如何轻松入门Python! 首先,我们要学习Python,那一定要和你 ...
- DG主备切换遇到not allwod或者RESOLVABLE GAP解决办法
今天做switchover,环境是11.2.0.3+OEL5.7,开始时主备库状态都是正常的,符合直接切换条件: 主库: SQL> select open_mode,database_role, ...
- kubernets之statefulset资源
一 了解Statefulset 1.1 对比statefulset与RS以及RC的区别以及相同点 Statefulset是有状态的,而RC以及RS等是没有状态的 Statefulset是有序的,拥 ...
- 攻防世界—pwn—guess_num
题目分析 checksec检查文件保护机制 这个结果看的我满是问号??? \n ida分析程序 是一个猜数字的游戏,需要全部输入正确才能得到flag 根据大佬的wp得出一下内容 先使用srand()进 ...
- kernel升级模式RKS让人振奋
前几天刚将我的ERP内核从701_rel 升级到721_ext_rel,看到721的说明了讲到,对于这次的更新,支持RKS(Rolling Kernel Switch)了,简单的讲,就是以后对于内核的 ...
- 消息队列之kafka
消息队列之activeMQ 消息队列之RabbitMQ 1.kafka介绍 kafka是由scala语言开发的一个多分区,多副本的并且居于zookeeper协调的分布式的发布-订阅消息系统.具有高吞吐 ...
- web框架的本质:
简单的web框架 web的应用本质其实就是socket服务器,用户所使用的浏览器就是一个cocket客户端,客户使用浏览器发送的请求会被服务接收,服务器会按照http协议的响应协议来回复请求,这样的网 ...
- uni-app开发经验分享十八:对接第三方h5
1.uni-app中对接第三方为了防止跳出app使用了webview <template> <view> <web-view :src="url" @ ...