有人能解釋爲什麼DbContext.SaveChanges 10X在調試模式慢
- 爲什麼DbContext.SaveChanges運行〜10倍的調試模式不是生產模式慢?
- 有什麼辦法可以加快速度?
在調試模式下,如果我在沒有調試的情況下啓動項目,我的網頁需要116秒來加載而不是15秒。
我已經設置了跟蹤語句,並確定在調試模式下,我的DbContext.SaveChanges方法花費了116秒的〜100秒。
在沒有調試的情況下運行該項目只需花費7秒在同一節中。
讓我知道在評論,如果你想了解更多信息..
項目設置:
- ASP.NET網頁
- VS2012
- SQLServer2012
- 實體框架5.0
附加升資訊:(讓我知道在評論,如果你需要更多)
- 在SaveChanges方法SQL查詢的累計數量爲20,000
- 生產的連接字符串:數據源= PC-DEV;初始目錄= aspnet-2013-06-04; Integrated Security = True; MultipleActiveResultSets = True; Application Name = EntityFrameworkMUE
- Debug Connection String:Data Source = PC-DEV; Initial Catalog = aspnet-2013-06-04; Integrated Security = True ; MultipleActiveResultSets = True; Application Name = EntityFrameworkMUE
- 我也經歷過與LocalDB作爲後備數據庫相同的相對性能
更新:
由於@ruionwriting的建議,我分析的數據庫與什麼我發現是,〜20000個SQL命令採取恰好在調試或生產模式的項目是否運行同一時間。 (每個命令0毫秒)。
但是,在調試模式下,20,000個命令之間的平均絕對時間差爲5ms。
與生產模式相比,該組命令的平均時間差爲0.3 ms。
這是大約10倍的時間性能差異,並隔離了實體框架與在調試模式下花費額外時間的實體框架。
有沒有辦法配置調試版本,使EntityFramework可以被引用而不用調試標誌?
如果我想以某種方式通過某種編譯器魔法實現性能,那麼在調試功能方面會失去什麼?目前我無法進入實體框架代碼,所以我不認爲我會錯過任何東西。
謝謝!
請問你的連接字符串的樣子,在調試時? – RealityDysfunction
@RealityDysfunction在生產和調試模式下用字符串更新了問題。 – Jesse
你有在VS中選中「啓用只是我的代碼」嗎?在調試菜單下 - >選項和設置 - >常規 - >啓用我的代碼。也許你有沒有選中,VS正在嘗試調試EF? – Tombala