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

  • Android Central

    Android Cent

    13 Kasım 2008
  • emimusic

    emimusic

    10 Mart 2006
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011