2015-06-23 100 views
5

我正在使用實體框架6.1.3的MVC 5應用程序。我試圖通過預先生成視圖來優化第一個通話,通常需要1-4秒。我明白爲什麼會發生這種情況,但我覺得我錯過了某個重要步驟。預生成實體框架的看法

我目前的測試運行相同的功能五次使用EF我的DB拉對象的集合。當我與 '嵌入在輸出目錄' 集我EDMX運行此我得到如下結果:

**

  • 首先EF電話:2617毫秒
  • 二EF電話:19毫秒
  • 三EF電話:19毫秒
  • 四EF電話:17毫秒
  • 第五EF電話:20毫秒

**

我想到這一點,因爲EF正在生成本地視圖來訪問數據庫...

當我切換到「複製到輸出目錄」,仔細檢查我的文件被複制到bin文件夾和我的連接字符串已更新,然後運行相同的測試,我得到了類似的結果:

**

  • 首先EF電話:2546毫秒
  • 二EF電話:19毫秒
  • 三EF電話:18毫秒
  • 四EF電話:18毫秒
  • 第五EF電話:21毫秒

**

沒有變化第一個電話,這很奇怪。我添加了EF Power Tools,右鍵單擊我的edmx => Entity Framework => Generate Views。一個'Model1.View.cs'文件是用每個表格/視圖的字符串創建的,所以我覺得我在正確的道路上。當我再次運行測試時,我得到了相同的結果。在新生成的'Model1.View.cs'文件的每個方法中放置一個斷點表明它不會被命中。

我失去了一個重要的步驟嗎?如何告知EF使用由EF Power Tools創建的文件,或者如何使「複製到輸出目錄」按我在線閱讀的方式工作?

回答

12

至於我記得EF電動工具沒有更新,以支持EF6。如果您確定這是導致問題,你既可以使用視圖生成T4 template或交互pre-gegnerated views視圖生成(是的,我是兩者的創造者)。您可以在this post中找到有關如何使用T4模板的更多詳細信息。交互式預生成視圖被描述爲here

然而,EF6視圖生成大大提高,並且僅當複雜層次涉及更大的模型的一個問題或。我認爲你所看到的瓶頸不是由視圖生成而是由模型構建造成的。看看EF團隊的this post,這個團隊談論了一些關於通過生成原生圖像來提高啓動性能的內容。你也可以看看Performance Consideration

+0

謝謝帕維爾! –

+0

我包含交互式預生成視圖和生成的本機圖像,我的第一次調用減少到458毫秒。你真棒。 –

+0

嗨馬修,我正在一個ASP.NET MVC應用程序,我會測試你的解決方案。你在哪裏添加了Pawel的代碼?在Global.asax文件中?我在外部DLL中定義了數據庫上下文和edmx。提前致謝。 – jacktric