2016-04-05 25 views
0

Entity Framework kullanıyorum ve performans hakkında bir sorum var. İşte Linq yöntemleri ekleme vs. saklı yordam ekle

benim linq eklenti yöntemidir:

CarTable newCar = new CarTable() 
      { 
       CarPlate = plate, 
       CarModel = model, 
       CarColor = color, 
       CarImage = image 
      }; 

entity.CarTable.Add(newCar); 
entity.SaveChanges(); 

Ve burada saklı aynı amaçla işlemdir:

CREATE PROC prCreateCar 
    (@plate NVARCHAR(20), 
    @model NVARCHAR(50), 
    @color NVARCHAR(10), 
    @image NVARCHAR(MAX)) 
AS 
BEGIN 
    INSERT INTO CarTable 
    VALUES (@plate, @model, @color, @image) 
END 

Ve bununla asp.net çağırarak:

entity.prCreateCar('34 F5 3498','Renault Clio','Blue','Images/Cars/clio.png'); 

Her ikisi de iyi çalışıyor ama burada benim soru ... hangisi daha iyi performans veriyor? Saklı yordamların daha hızlı olduğunu duydum ama doğru mu? Bu doğruysa, SELECT, DELETE, UPDATE ve INSERT gibi tüm koşullarda daha hızlı mı?

+4

olacaktır. Http://stackoverflow.com/questions/14530/linq-to-sql-vs-stored-procedures ve http://stackoverflow.com/questions/752064/performance-difference-between-linq-and-stored-procedures sayfasına bakın. – Habib

+0

Varlık Çerçevesi altında kullandığınız ** gerçek RDBMS **'ye bağlı olacaktır - ancak bu şekilde yapıyorsanız, SQL Server için performansın çok benzer olacağını varsayalım. Her iki yaklaşım da sonuçta, yürütülmesi gereken parametreli bir sorgu ile sonuçlanır - ve her iki yol da, gerektiği gibi yapılırsa, aynı şekilde davranır. –

+2

Ancak dikkat etmeniz gereken bir kelime: * neden * imajınız için 'nvarchar (max)' kullanıyorsunuz!?!?!? Bu bir ** ikili ** veri kümesidir - varbinary (max) '(string tabanlı veri türü yerine) kullanılarak daha iyi sunulacaktır –

cevap

0

Böyle basit sorgular için büyük olasılıkla bir fark olmaz. Daha karmaşık sorgularınız varsa (yalnızca farklı tablolar/alt sorgular/vb.) Sadece farklı parametreler kullanan farklı işlemler kullanılırsa, Veritabanının yalnızca bir kez bir yürütme planı oluşturması ve daha sonra önbelleğe alması gerektiğinden daha iyi olur. Her düzenli SQL sorgusu için yeniden oluşturulacaktı.

Bir satırda çok sayıda ek yapmanız gerekiyorsa, örn. Harici bir kaynaktan (katalog verileri veya benzer bir şeyden) veri alırken BULK INSERT ifadelerini kullanmak isteyebilirsiniz. EF'in, bu özelliği normal EF operasyonlarına benzer bir şekilde kullanmasına izin veren eklentileri de var - bunlarla pratik deneyimim yok. Bir örnek, kendiniz ölçmek için EntityFramework.BulkInsert

İlgili konular