Neden EF 4.1 varlıkları çok yavaş ObjectContext göre ekleme?
Temelde, ben bir hareketin içinde 35000 nesneleri Ekle:
using(var uow = new MyContext()){
for(int i = 1; i < 35000; i ) {
var o = new MyObject()...;
uow.MySet.Add(o);
}
uow.SaveChanges();
}
Bu sonsuza kadar sürer!
ObjectContex
temel t (IObjectAdapter
kullanarak) kullanırsam, hala yavaş ama 20'li sürer. DbSet<>
kare miktar alır bazı doğrusal arama yapıyor gibi gözüküyor
Başkasının bu sorunu görüyor musun?
CEVAP
Zaten yorum Ladislav tarafından belirtildiği gibi, otomatik değiştirme algılama performansını artırmak için devre dışı bırakmak gerekir:
context.Configuration.AutoDetectChangesEnabled = false;
Bu değişiklik algılama DbContext
API, varsayılan olarak etkindir.
Bunun nedeni DbContext
davranır çok farklı ObjectContext
API olduğundan çok daha fazla fonksiyonları DbContext
API çağrısı DetectChanges
dahili daha fonksiyonları ObjectContext
API otomatik değiştirme algılama etkinleştirilir.
Here varsayılan DetectChanges
adını verdikleri bu fonksiyonların bir listesini bulabilirsiniz. Bunlar:
- , , *,
Local
, *Find
Attach
14 veyaDbSet
Remove
üyeler DbContext
** 21*,* 20SaveChanges
üyeleriDbChangeTracker
Entries
yöntemi
Özellikle Add
aramalar yaşanan düşük performans için gerekli olan DetectChanges
.
Ben bu aksine ObjectContext
API sadece otomatik olarak AddObject
ve diğer ilgili yukarıda belirtilen yöntemleri SaveChanges
ama DetectChanges
çağırır. Bu yüzdenvarsayılanObjectContext
performans daha hızlı.
Neden bu kadar çok işlevleri DbContext
bu varsayılan otomatik değişim tespiti takdim ettiler mi? Emin değilim, ama bunu devre dışı bırakmak ve elle DetectChanges
uygun noktalarda arama advanced and can easily introduce subtle bugs into your application so use [it] with care olarak biliniyor.
Neden bazı yüzer < karşılaştırmalar...
Neden yerel değişkenler olun ekleme ya...
Neden bir döngü iki döngü daha yavaş g...
Neden benim program tam olarak 8192 el...
Neden herhangi bir parametre (asıl fon...