EntityFramework優化:第一次啟動優化
阿新 • • 發佈:2018-05-19
n) star span .com error href start ica 控制
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
EntityFramework優化:第一次啟動優化