2012-06-22 32 views
11

İlk önce EF koduyla yapılan ilk sorgulamayı hızlandırmak mümkün olup olmadığını merak ediyorum.Entity Framework başlangıç ​​zamanı

I2 alanları içeren bir yapıya sahip bir küçük bir test programı yaptık ve ilk sorgu (tam olarak aynı olan) ikinci sorgu 0.006 saniye sürer, 2.2 saniye sürer.

Zaten görüntüyü önceden derledim, böylece burada yardımcı olmayacak. Sanırım problem, modelin belleğe yüklenmesinin biraz zaman alması, ama bu kadar uzun sürmesi gerektiğidir. Ve bu modelin görüşlerle olduğu gibi önceden bir yolu var mı?

+1

Bunun mümkün olduğunu düşünmeyin, ama yanılıyor olabilirim. İlk sorgu sırasında neler olduğunu anlamak için bu soruya bakın http://stackoverflow.com/questions/5634338/ef-4-1-code-first-onmodelcreating-call-time –

+0

@ RaphaëlAlthaus Doğru olabilirsiniz:/Sadece garip .. DbModelBuilder sınıfını kullanarak kendi modelinizi oluşturabilir ve sonra bu nesne üzerinde Build yöntemini çağırabilirsiniz, bu yüzden çalışma zamanı yerine bilgisayar başında bunu yapmak mümkün olmalıdır. Ama belki de uygulanmadı. – nyhjem

+0

Veritabanı şema uyumluluğunu kontrol etmek biraz zaman alabilir. Bunu SQL profiler kullanarak kontrol edebilirsiniz. –

cevap

5

Bu makale: Squash Entity Framework startup time with pre-compiled views bir çözümü detaylı bir şekilde anlatmaktadır.

Bu önceden derlenmiş .Views sınıf dosyası oluşturmak için Varlık Framework güç araçları Optimize varlık veri modeli seçeneğini kullanarak içerir. İlk sorgunuzu yaptığınızda, EF kendini başlatır ve bu biraz zaman alır.

+4

Bunu zaten denedim, ancak şimdi bağlandığınız makaledeki adımları izledim. Görünüm oluşturuluyor, ancak ilk erişim hala çok yavaş. Küçük bir test yaptım. İlk önce veritabanına bir SyslConnection ve SqlCommand ile erişiyorum. 0.2 sn sürüyor. Bundan hemen sonra EF kullanıyorum ve benzer bir şey yapıyorum (con.Users.Count();). Bu 3,08 sn sürdü ..! Daha sonra tekrar aynı kod satırını çalıştırıyorum ve bundan sonra sadece 0.007 sn sürüyor .. EF, veritabanına ilk kez eriştiğinizde görüntü üretmekten başka bir şey yapmıyor. – nyhjem

4

EF'in altyapının başlatılmasını hızlandırmak için yapılması gereken çok şey olduğunu sanmıyorum, ancak gerçekten aradığınız şey, EF'in ilklendirmesini değil, yaptığınız ilk sorgulamayı hızlandırmaksa, EF'yi başlatmaya zorlayabilirsiniz. İlk sorgunuzu çalıştıran önce .

 using (var db = new MyContext()) 
     { 
      db.Database.Initialize(force: true); 
     } 
+3

force = true will, iyi, daha önce alt yapı/içsel olarak başlatılmış olsa bile zorla yeniden başlatma, bu yüzden güç kullanmayın: bağlantı dizesi veya tablo yapılarını değiştirmediyseniz doğru. –