2013-04-30 85 views
3

在使用EF 5.0和WCF數據服務對我的數據訪問例程進行一些測試期間,我遇到了性能問題。我從一個WCF數據服務操作中執行以下的簡單查詢:增加檢索到的記錄數指數增加linq查詢持續時間

var addresses = (from address in context.Addresses select address).Take(500); 
var addressList = addresses.ToList(); 

當我只需要500條記錄,查詢時間約爲300毫秒。以1000條記錄爲例,查詢時間爲4秒。以2000條記錄查詢時間爲24秒。記錄約6000條記錄,查詢時間爲360秒或更長。

當我執行由Sql Server Management Studio中EF生成的sql語句時,6000記錄查詢基本上是瞬時的。

可以配置哪些設置以消除此性能問題?

+0

如果不需要改變,然後跟蹤你可以嘗試調用'.AsNoTracking()'您'DbQuery'所以你不要沒有ObjectStateManager的開銷。 – 2013-05-01 01:28:41

回答

1

這是一個只讀操作(例如顯示在網格中)還是需要更新從數據庫中檢索的實體?

如果您不需要更新實體,那麼您應該使用.AsNoTracking()方法 - 這意味着實體框架不會嘗試跟蹤實體的任何更改。嘗試是這樣的:

var addressList = context.Addresses.AsNoTracking().Take(500).ToList(); 

推薦閱讀:

Entity Framework and AsNoTracking

+0

感謝您的回覆,但使用AsNoTracking對查詢執行時間沒有明顯影響。我相信時間過長是由EF或WCF數據服務中的一些有限資源造成的,但我不知道哪些或者如何重新配置​​它們。 – 2013-05-01 11:20:47

+0

瑞,我錯了。我用AsNoTracking重新運行測試,2000條記錄只花了14毫秒。謝謝你的幫助。 – 2013-05-01 12:47:01

+0

我很高興我能幫上忙。如果您認爲我的回答很有用,請將其標記爲正確答案並/或將其提升。謝謝 – 2013-05-01 12:48:34