[EF] 解決網站的第一次請求很慢 - Pre-Generated Mapping Views

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

若有謬誤,煩請告知,新手發帖請多包涵

2010~2015 C# 第四季