2013-11-02 25 views
4

我的應用程序使用EF5與DbContext和大約100個實體類。 對於第一個查詢,初始化第一個上下文實例需要大約5秒和大約1秒。 創建預編譯查詢後,所需時間減少到4.5秒和0.1秒。EF5 CodeFirst啓動性能:在編譯時生成edmx模型?

因此,看起來代視圖尤其加速了第一個查詢。 但是,第一個上下文初始化似乎只從預編譯查詢中受益。

在我的理解中,EF在運行時從實體類創建一個EDMX模型。 也許這會導致啓動時延遲。 我想盡可能地從創業世代移到編譯時間。 爲什麼程序在每次啓動時計算相同的東西?

如果生成的數據依賴於例如連接字符串, 我想爲每個單獨的依賴項存儲一次。 也許有一些屬性包含生成的數據,我可以序列化到一個文件並再次加載它來抑制啓動延遲?

當我查看數據庫遷移表時,有一個編碼和壓縮的EDMX包含。 看來這個將與當前的比較來確定模式更改。 要對其進行歸檔,EF必須在每次啓動時生成一個EDMX。一次又一次..... 這一個我喜歡緩存加快。

在運行時,當應用程序可以信任數據庫架構是當前的,我認爲EF應該簡單地使用這個datbase存儲的EDMX嗎?

回答

0

您正在尋找預編譯的視圖(EDMX的.NET表示)。通常這些視圖是在運行時生成的,但您可以使用EF Power Tools將它們作爲單獨的項目文件在設計時生成並與項目一起構建。

遷移表包含EDMX,但它不應該影響您的性能,除非您正在進行遷移。

+0

我意外錯誤地將「預編譯視圖」與「編譯查詢」進行了錯誤命名。事實上,我正在使用這種優化。但它只獲得了約20%的優勢。 –

+0

你使用.NET 4.5嗎? –

+0

是的,我正在使用.NET 4.5 –