SORU
9 Mayıs 2011, PAZARTESİ


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! ObjectContextemel 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
9 Mayıs 2011, PAZARTESİ


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, *FindAttach14 veya DbSet Remove üyeler
  • DbContext ** 21*,* 20 SaveChanges üyeleri
  • DbChangeTracker 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • Elliot Davin

    Elliot Davin

    28 Kasım 2008