2013-06-06 38 views
1

我需要用「假」數據填充我的數據庫,以便對其執行一些壓力測試。
因此,我寫了一些簡單直接的代碼來輸入數據。
它運行在7臺,創造了每一個對象,並使用添加:實體框架 - 在上下文中添加簡單實體非常緩慢

System.Data.Entity.Add(TEntity) 

如下:

context.MyObject.Add(MyObjInstance); 

我每隔幾百對象保存。

現在,這是減慢,即使沒有提交。 (我的意思是幾千個物體的小時數)。
有沒有更快的方法來添加(大約幾千個)對象?
addAll()或其他任何會加速Add方法?
謝謝。

+0

爲什麼不直接用數據庫腳本來做? – tariq

回答

4

可能是因爲多次致電DetectChanges()。一些EF功能自動調用此方法。見here

如果跟蹤大量的實體在你的背景,你叫一個 這些方法多次在一個循環,那麼你可以通過關閉變化檢測的 時間得到顯著 性能改進循環

context.Configuration.AutoDetectChangesEnabled = false;

做你的密集.Add()個操作和設置:

context.Configuration.AutoDetectChangesEnabled = true;

調用SaveChanges()之前。

還可以考慮對部分批量操作使用新的上下文,因爲上下文跟蹤的實體越多,執行的越糟糕。

+0

試過了。增加運行速度快,但現在SaveChanges()需要很多時間:-)(我有一種感覺,總共需要相同的數量) – Jeb

+2

不要調用context.Configuration.AutoDetectChangesEnabled = true和Dispose of Context。 – ErikEJ