EF第一次加载慢或过一段时间不访问时再次访问加载慢问题
优化方案:
1. EF Pre-Generated Mapping Views(预生成映射视图)
在应用程序初始化时一次性触发所有的DbContext进行mapping views的生成操作——调用StorageMappingItemCollection的GenerateViews()方法
Application_Start加入下面代码
using (var dbcontext = new CnblogsDbContext())
{
var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
mappingCollection.GenerateViews(new List<EdmSchemaError>());
}
2.安装Application Initialization
3.用Ngen安装生成EF的本地镜像
由于C#是使用实时 (JIT) 编译器编译原始程序集。因此第一次运行C#程序(或Dll)时,程序的启动非常慢。为了提高用户的体验,可以用Microsoft的供的本机映像生成器 (Ngen.exe) 提高程序的性能。Ngen.exe 创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行库可从缓存中使用本机映像,而不是使用实时 (JIT) 编译器编译原始程序集。
1)在命令行中定位到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。因为Ngen.exe存放在这里,如果不定位,Ngen.exe无法正确定执行。
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
2)生成本机本机映像。
ngen install D:\SystemTool\ManagerNote.dll (备注:Dll方式)
ngen install D:\SystemTool\ManagerNote.exe (备注:exe方式)
3)卸载本机本机映像,请使用与安装时相同的命令行选项。
ngen uninstall D:\SystemTool\ManagerNote.dll
注意:这里根据你自己机器(是32还是64)和.net版本,选择相应的命令,只需要安装EntityFramework.SqlServer.dll
4.iis设置 闲置超时(时间)
因为安依赖EntityFramework.dll,会自动安装生成EntityFramework.dll的本地镜像。