EF 在第一次使用時會根據資料庫產生 mapping views,這個動作很花時間,以下紀錄一下使用方式
開發環境
- Windows 2012R2
- VS 2015 Update3
- Entity Framework 6.1.3 ,Code first from Database
使用方式:
在應用程式第一次起來的時候(Application_Start Event)調用以下
using (var dbcontext = new TestDbContext())
{
var objectContext = ((IObjectContextAdapter) dbcontext).ObjectContext;
var mappingCollection =
(StorageMappingItemCollection) objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
mappingCollection.GenerateViews(new List<EdmSchemaError>());
}
接著設定好 Web Site PreLoad、ApplicationPool 回收機制,讓回收去觸發 PreLoad
使用NGen.exe
Improving Startup Performance with NGen (EF6 Onwards)
使用時機:
在 Production 環境裡面,由 JIT 編譯器產生的 Code ,效能會比 Native Images 好,簡單來講這適用在開發環境阿,不是穩定的正式環境
如何使用:
用管理員身分打開命令提示字元,依照版本調用 ngen
安裝
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install EntityFramework.SqlServer.dll
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install EntityFramework.SqlServer.dll
卸載
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen uninstall EntityFramework.SqlServer.dll
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen uninstall EntityFramework.SqlServer.dll
參考資料:
https://msdn.microsoft.com/en-us/data/dn582034
http://www.kuqin.com/shuoit/20140920/342225.html
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET