EF 4.3.1 modelimde 200 tane tek tablo var. İlk başlangıç korkunç, birkaç dakika. DotTrace tarafından yakalanan bir profil, burada bir dizi yönteme yapılan çağrıların ve 36 milyon IEnumerable.Contains() çağrısının da gösterdiği gibi, bazı derin algoritmalar/ölçeklenebilirlik seçenekleri çerçevesinde derinlemesine ortaya çıkmaktadır. İşte bir pasaj, hepsi bu veritabanında yapılan ilk sorgu tarafından tetiklenir (gelecekteki sorgular bunu yapmaz ve iyidir).Varlık Çerçeve başlatma SLOW - daha hızlı önyükleme yapmak için ne yapabilirim?
Bunu daha az acı yapmak benim modeline ne yapabilir? Bunu bir şekilde hazırlayabilir miyim? Daha iyisi, EF ekibi bu sorunları ele alabilir mi yoksa çerçeveyi açabilir mi? Ya da en azından Warapper
'un yazımını düzeltin mi?
DÜZENLEME: Bunu tetikleyen belirli bir EF çağrısı temel olarak var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault();
'dur. Ayrıca bir EF Migrations Seed() AddOrUpdate etkin bir şekilde aynı yığını oluşturur. Biraz daha fazla bağlam verebilir dolgun yığın izleme, burada: Fuller Stack Trace
DÜZENLEME: Bazı ilgili bağlantılar:
- MSDN: Performance Considerations (Entity Framework) (@AakashM sayesinde)
- MSDN: EF Power Tools
- SO: Entity Framework 4.1 for large number of tables (715)
EDIT2: Artık onlar sadece open sourced kodu, görünen o bu hat şu:
//Filter the 1:1 foreign key associations to the ones relating the sets used in these cell wrappers.
oneToOneForeignKeyAssociationsForThisWrapper =
oneToOneForeignKeyAssociationsForThisWrapper.Where(
it => (it.AssociationEndMembers.All(endMember => entityTypes.Contains(endMember.GetEntityType()))));
Bazı çalışma gerektiren bir tanesidir. Muhtemelen gerekmediğinde bir O (n^2) algoritması kullanıyor, ama henüz yakından bakmadım.
EDIT3: Daha büyük modeller için yavaş olduğu bilinir öncesi Ef6'yı görünümü nesilde http://entityframework.codeplex.com/discussions/396130
Bu izlemeyi oluşturan C# örneğini porovide yapabilir misiniz? –
@Erik Philips: Elbette (düzenlenmiş soru) ama önemsiz. –
İlk bağlantı noktası [Performansla İlgili Konular (Varlık Çerçevesi)] olmalıdır (http://msdn.microsoft.com/en-us/library/cc853327%28v=vs.110%29.aspx) zaten orada - sürüm numarasını kontrol edin btw – AakashM