EntityFramework优化:第一次启动优化
1. 预先生成视图
通过代码的方式来预先生成视图,要求EntityFramework是6.0及以上版本。
控制台程序:
using System.Data.Entity.Infrastructure; using System.Data.Entity.Core.Mapping; using System.Data.Entity.Core.Metadata.Edm;
using (var ctx = new LibingContext()) { var objectContext = ((IObjectContextAdapter)ctx).ObjectContext; var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>()); //var products = ctx.Products.ToList(); }
MVC程序:
protected void Application_Start() { using (var ctx = new mcccEntities()) { var objectContext = ((IObjectContextAdapter)ctx).ObjectContext; var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>()); } }
2. NGen优化
参考:Entity Framework Improving Startup Performance with NGen (EF6 Onwards)
主要是针对EF6及以上版本的,因为低于这个版本的自带该特性,在6.0之前的EF中,EF的运行时核心类库也是.NET框架的一部分,其本地映像在.NET 核心类库加载时自动加载,在6.0及之后的版本,EF整个运行时已经被集成到EntityFramework NuGet包中,本地映像需要使用NGen工具来生成才能达到类似的效果。
NGen的作用以及为什么能够加快应用程序的启动性能:
.NET框架支持为托管应用或者程序集生成本地映像文件来帮助应用程序更快启动和在一些情况下减少内存占用。
在应用程序执行之前,通过将托管代码程序集翻译为包含本地机器指令的文件,能够减少.NET JIT编译器在应用程序启动的时候,生成本地指令代码这一过程,从而能够加快应用程序启动。
NGen使用方法:
(1)以管理员身份启动控制台cmd程序
(2)切换到本机.NET Framework目录下:
32位:%WINDIR%\Microsoft.NET\Framework\v4.0.30319\
64位:%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\
(3)运行ngen install + 程序集的路径和名称
C:\WINDOWS\system32>cd /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319 C:\Windows\Microsoft.NET\Framework64\v4.0.30319>ngen install F:\10-Projects\Libing\Libing.App\bin\Debug\EntityFramework.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319>ngen install F:\10-Projects\Libing\Libing.App\bin\Debug\EntityFramework.SqlServer.dll