EntityFramework優化:第一次啟動優化

libingql發表於2018-05-19

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

 

相關文章