我試圖在我的應用程序中診斷嚴重的性能問題。這已經差不多一個星期了,我不確定是什麼原因造成的,除了今天我注意到下面的「Loaded」EntityFrameworkDynamicProxies'這一行持續了將近2分鐘。這是什麼?爲什麼它如此之慢,以及如何能夠我改進呢?實體框架掛載在加載的DynamicProxy上
1
A
回答
0
當創建POCO實體類型的實例中,實體框架經常創建充當實體的代理動態生成的派生類型的實例。此代理將覆蓋一些虛擬屬性實體在訪問屬性時自動插入用於執行動作的鉤子,例如,該機制用於支持關係的延遲加載
您可以通過在DbContext
構造函數設置此行this.Configuration.ProxyCreationEnabled = false;
禁用它。
如果禁用,當現有代碼依賴Lazy Loading
加載相關數據時,您可能會在應用程序某處遇到某些問題。您必須通過使用Explicit Load
或Eager Load
來解決這些問題。通過使用您DbSet
的Include
方法類似db.Persons.Include(p => p.Cars).Include(p => p.Pets).Include(p => p.Children).Where(p => p.Id == personId);
Load
方法您進入這樣
- 預先加載:或
db.entry(person).Collection(p => p.Cars).Load();
收集的導航性能db.entry(person).Property(p => p.Home).Load();
進行簡單的導航屬性。
延遲加載,顯式加載或預先加載,如果您沒有正確使用EF,沒有改善應用程序性能的靈丹妙藥。有些東西在你的代碼進行檢查,以確保您有:
- 使用
ToList()
,ToArray()
等..只有一次執行查詢,並禁止對數據庫進行同樣的要求時,你需要重申的查詢。 - 不在客戶端過濾。我的意思是確保在向數據庫發送查詢之前使用正確的過濾器創建查詢。
- 如果您看到EF生成的SQL效率不高,則爲查詢創建SQL視圖。複製生成的SQL並分析SSMS上的執行計劃。
有很多事情可以根據你的應用程序在做什麼,需要加以改進。您可以使用緩存,以避免未來的請求等...
相關問題
- 1. 實體框架加載
- 2. 實體框架懶加載
- 3. c#實體框架加載實體
- 4. 實體框架加載相關實體
- 5. 實體框架 - 加載嵌套實體
- 6. 實體框架 - 延遲加載,加載子實體問題
- 7. 延遲加載,延期加載和實體加載實體框架
- 8. 使用實體框架加載文件
- 9. 實體框架延遲加載
- 10. 實體框架6.1.3無法加載
- 11. 實體框架,SQLite和延遲加載
- 12. 實體框架動態模式加載
- 13. 實體框架3.5和預先加載
- 14. 實體框架批量顯式加載
- 15. 實體框架加載外鍵與HasOptional
- 16. 使用實體框架加載SQL表
- 17. 預先加載與實體框架
- 18. 延遲加載框架實體問題
- 19. 實體框架預先加載器
- 20. 實體框架6懶加載問題
- 21. 實體框架延遲加載和ICollection
- 22. 實體框架 - 參考不加載
- 23. 實體框架加載錯誤
- 24. 實體框架加載多級聯繫
- 25. 實體框架延遲加載問題
- 26. 實體框架加載子與父母
- 27. 實體框架自動急切加載
- 28. 實體框架+多線程+懶加載
- 29. 實體框架加載/保存數據
- 30. 實體框架5不加載屬性
我有惰性加載和代理創建都禁用在我的dbcontext和當前使用.Include()這就是爲什麼這是如此令我困惑。我應該啓用延遲加載嗎?另外我還看到EF包含速度非常慢,這可能是我應該注意的問題。 – devfunkd
我編輯了我的答案。 – CodeNotFound