我正在將應用程序從EF1升級到EF4.1 我使用「ADO.NET DbContext Generator」模板創建了一個DbContext和一組POCO。DbContext ChangeTracking殺死性能?
當我查詢生成的DbContext時,查詢的數據庫部分需要4ms才能執行(使用EF Profiler進行驗證)。然後在將結果返回給應用程序之前,需要大約40秒的時間(用詞:FORTY!)來完成它所做的任何事情。
EF1在少於2秒內處理相同的查詢。
關閉AutoDetectChanges,LazyLoading和ProxyGeneration贏得我2-3秒。
當我使用AsNoTracking()擴展方法時,我能夠將總執行時間減少到大約3秒。
這表明ChangeTracking是罪魁禍首。
但ChangeTracking是我所需要的。我必須能夠最終堅持所有的改變,而不必親自挑選哪些實體被修改。
任何想法如何解決性能問題?
在這裏討論了幾次。它看起來像EFv4.1中的一個錯誤 – 2011-05-12 07:46:35
當我使用EF4.0和「ADO.NET POCO實體生成器」模板時,情況更糟糕。然後它需要超過80秒,直到我有一些結果。所以這個錯誤在以前的版本中變得更加嚴重,MS無法在EF4.1中正確地修復它? – 2011-05-12 08:05:30
您可以嘗試關閉'AutoDetectChanges' /使用'AsNoTracking',但同時創建跟蹤代理(所有屬性都必須是虛擬的)。我想知道這個曲目是否會改變,現在我無法對它進行測試。 – 2011-05-12 08:12:59