我目前正在使用實體框架4.1(代號第一)和SQL Server CE 4.0的應用程序。我從SQL Server CE 4.0中真正喜歡的新事物之一是計算值。實體框架4.1 DatabaseGeneratedOption.Identity性能
但我有一些性能問題,同時導入舊數據到我的新的數據存儲系統(約50000項)。這是我的第二個實現。第一個版本使用Entity Framework 4.0和SQL Server CE 3.5。但是這些實現之間存在巨大的性能差異。代碼第一次實現需要大約一個小時來導入條目,另一個實現只需要幾分鐘。
中大部分時間在SaveChanges
方法花費。我將問題追溯到[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
屬性。如果我使用[DatabaseGenerated(DatabaseGeneratedOption.None)]
並實現我自己的密鑰生成(作爲一種簡單的解決方法),則性能將回到第一個實現的水平。
這是一個已知的問題?有什麼辦法可以解決這個性能問題嗎?或者正在生成我自己的密鑰?
這裏有兩個問題/關於EF 4.1批量插入答案:http://stackoverflow.com/questions/5943394/why-is-inserting-entities-in-ef-4-1-so-slow-compared- to-objectcontext/5943699#5943699和http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework/5942176#5942176密鑰主要是禁用自動更改檢測。雖然我沒有看到與'DatabaseGeneratedOption'的關係,但也許它有幫助。 – Slauma
禁用AutoDetectChangesEnabled並不能真正改善我的情況下的性能(但我這樣做)。不使用DatabaseGeneratedOption.Identity的速度要高得多。 – Fox32