EF第一次加载较慢的原因以及解决方法(汇)
来源:互联网 发布:软件开发实施方案 编辑:程序博客网 时间:2024/05/22 05:18
前言:
这个问题没有遇到过,但是面试当中很可能会被问到,当然也不主要是为了应对面试,学到知识才是王道
为什么会慢:
在应用程序中定义的每个上下文,其首次使用时,JUST-INTIME编译器:Entity Framework都会根据数据库中的信息在内存中生成一个映射视图(mapping views),这个操作非常耗时。定义的每一个上下文都会受此困扰
1、Code First第一次启动会对比程序中的Model与数据库表(database initializer ),生成Model与数据库的映射视图
2、EF从6开始安装.net Framework默认不会安装EF。因此EF程序集就没有生成本地镜像,这样每次程序启动,EF的代码都会通过just-in-time (JIT) compiler把MSIL中间代码编译成本机能识别的本地代码(存在程序运行的进程的内存中),当程序进程被终止它将回收(例如:iis程序池回收,程序池默认是按需触发运行的,没人访问它就不启动了)。由于EF框架还是比较大的,EF6文件大小到4-5M了,所以每次启动都要重写编译本地代码有比较明显的性能影响。
3,MVC的程序第一次访问比较慢的的问题由于第一次是要处理视图文件.cshtml(生成为.cs文件)、加载引用的dll程序文件和初始化程序池等等
解决一EF暖机操作
在应用程序初始化时一次性触发所有的DbContext进行mapping views的生成操作——调用StorageMappingItemCollection的GenerateViews()方法
using (var dbcontext = new CnblogsDbContext()){ var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext; var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>());}
对于ASP.NET应用程序 ,可以将上面的代码放在Application_Start或者PreApplicationStartMethod中执行。
来,给Entity Framework热热身
多种方案,挺详细的:优化EF Code First第一次请求速度
解决二application Initialization
iis8内置功能,安装Application Initialization Module for IIS 7.5,
http://pan.baidu.com/s/1c091WxM
用Ngen安装生成EF的本地镜像
Ngen创建本机映像native-code并将其安装到本机映像缓存中,可通过内存映射被多个进程共享
本机影像生成器(Ngen.exe)工具使用实践
NGen是个什么东西?
禁用第一次ef查询对表__MigrationHistory的问题
使用了ef的Code first会在第一次ef查询的时候会对__MigrationHistory访问,是为了检查数据库和model是否匹配,以保证ef能正常运行。通过监测会先执行下面的sql:
SELECT [GroupBy1].[A1] AS [C1]FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[__MigrationHistory] AS [Extent1]) AS [GroupBy1]GOSELECT TOP (1) [Extent1].[Id] AS [Id], [Extent1].[ModelHash] AS [ModelHash]FROM [dbo].[EdmMetadata] AS [Extent1]ORDER BY [Extent1].[Id] DESCGO
这段sql语句其实中只是在开发的时候有用,发布到生产环境,可以把这个给禁用了以提高性能。解决办法:
Application_Start加代码
Database.SetInitializer<上下文>(null);
原文链接
后语:
上面的东西是汇集四海八荒的精髓而成的,不过正确与否以目前本菜的水平和还无法评价,感觉很是不错,谢谢大牛们的分享(尊重原著),感谢大家的阅读o(^▽^)o
再推荐一篇:关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
- EF第一次加载较慢的原因以及解决方法(汇)
- asp.net网站第一次加载慢的原因
- Eclipse更新ADT较慢的解决方法
- EF使用延迟加载的本质原因
- wordpress加载慢的解决方法
- sencha touch 第一次加载慢的解决办法
- XeLatex在window上编译较慢的解决方法
- 电脑速度慢的原因及解决方法
- 电脑反应速度慢的原因及解决方法
- DBA_FREE_SPACE查询慢的原因及解决方法
- arcgis加载地图特别慢的原因
- 页面加载慢的原因分析
- Fedora 启动速度很慢原因以及解决方法
- WordPress 后台卡,打开慢,加载慢的原因
- 解决 EF 启动慢问题 第一次访问慢
- 第一次调用WebService慢的原因和解决办法
- C# HttpWebRequest第一次请求很慢超时的原因
- C# 第一次网络请求速度慢的原因
- 微信授权登录
- Java-异常处理
- TensorLayer MNIST
- Spring MVC +Web 的执行过程
- mysql 源码安装
- EF第一次加载较慢的原因以及解决方法(汇)
- Yii2 官方文档阅读笔记
- 二叉树的链式存储与线索二叉树-数据结构(14)
- Deep learning的一些教程
- Android:inputType参数类型说明
- ubuntu14.04安装matconvnet
- Android libcutils库中整数溢出导致的堆破坏漏洞的发现与利用
- css实现五个六边形排列
- android调节音量——AudioManager的应用