EF優化之啓動預熱

爲何Entity Framework的初始化速度慢如蝸牛呢?數據庫

對於在應用程序中定義的每一個DbContext類型,在首次使用時,Entity Framework都會根據數據庫中的信息在內存生成一個映射視圖(mapping views),而這個操做很是耗時。app

在第1次調用DbContext進行數據庫操做時會進行緩慢的mapping views生成操做,後續的DbContext操做會共享已經生成的mapping views,不受這個問題影響。可是要注意的是你定義的每個DbContext都會面臨這個問題。spa

而咱們的緩解之道則是在應用程序初始化時一次性觸發全部的DbContext進行mapping views的生成操做——調用StorageMappingItemCollection的GenerateViews()方法。code

 1、預生成映射視圖

將代碼放在Application_Start中調用PreApplicationStartMethod中執行blog

複製代碼
 private void PreApplicationStartMethod() { using (var dbcontext = new XXXDBContext()) { var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext; var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>()); } //對程序中定義的全部DbContext逐一進行這個操做 }
複製代碼

在程序更新時只需發一個請求讓程序啓動起來,好比訪問首頁,就能夠直接發佈。而第1位用戶,等待時間由原來7秒減小到0.5-0.6秒。內存

相關文章
相關標籤/搜索