我們遇到了Entity Framework的問題,我們第一次在非常簡單的對象插入上執行SaveChanges時,存在2-4秒的延遲。我已經縮小了這一點(通過ANTS性能分析器)以查看一代。我已經看到並按照EdmGen或T4 template預生成視圖的文章,但這沒有幫助:.Views.cs文件只包含SELECT語句,而不包含UPDATE或INSERT語句。關於EF和使用預編譯查詢,緩存查詢等的性能已經有很多討論,但它都圍繞着選擇,而不是插入或更新,這些都是隱藏在SaveChanges()後面的。在實體框架中生成INSERT/UPDATE視圖
我發現獲得EF來生成INSERT視圖的唯一方法是嘗試在服務啓動時插入一行,我知道會失敗,例如將外鍵設置爲不應存在的ID。這對我來說似乎非常荒謬。有沒有更好的辦法?我真的不在乎它是在編譯時還是在服務啓動時發生,但是有沒有辦法強制EF生成所有(基本)UPDATE和INSERT視圖?使服務的第一個用戶等待2-4秒來插入一行是不可接受的。
我們現在使用EF 4,但如果需要解決此問題,我們將跳轉到EF 5和.NET 4.5。
編輯: 進一步的研究表明,雖然存在是開銷第一次調用SaveChanges()調用在表上,同時它創建/編譯更新視圖,它可以忽略不計(30-40ms)。對它進行分析使其看起來比由巨大的調用堆棧所導致的更糟糕。我的原始時間爲2-4秒最終分解爲其他開銷,如: 創建第一個上下文:1600ms 首次EF操作(加載或創建查詢視圖)如果預編譯爲400毫秒,否則爲3000+毫秒 初始連接到遠程數據庫:500毫秒