2012-01-04 25 views
5

Birkaç yüz bin kayıtları olan MS SQL 2005'te birincil anahtarlı bir tablom var. Bir stüdyon için Management Studio'da sorguladığımda çok hızlı bir şekilde karşımıza çıkıyor, ancak bulmak için aşağıdan kod kullandığımda, bu çok saniyeler alıyor. Satırı güncellemeye ihtiyacım olduğu için veri kümesini kullanmam şart. Performansı nasıl artırabilirim?SqlDataAdapter.Fill bir kayıt için bile çok yavaş

objData . ProcName ="myProcName" 
objData . CreateCommand() 
objData . Parameters("@BName", SqlDbType. VarChar, 20, "MyBranch1") 
SqlDataAdapter da = objData . createAdapter() 
da . Fill(ds,"MyTable1") 

proc kodu çok basit olsa da:

select * from MyTable1 Where BranchName = @BName 

5 tablolar zaman bir dakikadan fazla olması aynı şekilde bu yüzden toplam açmış bu veri kümesi vermeyecek

+1

Datareader gidilecek yoldur: http://msdn.microsoft.com/en-us/library/haa3afyz%28v=VS.100%29.aspx – broke

+0

İşte örnek kod – Adeem

cevap

2

DataReader kullanmayı düşünmelisiniz veri kümesi yerine ve sqlcommand kullanarak manuel güncelleme yapın. Ben aynı çalışan karşı, bir yanıt dönmek için birçok saniye sürdü SqlDataAdapter kullanarak çok benzer gecikme davranışı gördük

+0

Yani diyorsunuz Veri seti ile daha iyi performans elde etmek mümkün değil mi? Veri kümesindeki 5 veri kümesinden 5 satırlık – Adeem

+0

'u içermediğinden, veri kaydedicisini kullandığımda, her seferinde bir kaydı bir defada taşır, adaptör tüm kayıtları alır ve datarow nesneleri oluşturur. bunun için (ve yazılan veri kümesine bağlı olsun veya olmasın, kısıtlamalar ve ilişkiler) bu nesne oluşturma, sahip olduğunuz kayıtların sayısıyla doğru orantılı olarak daha fazla zaman alır. Bu bir webapp veya windows uygulaması mı? –

+0

üzerinde çalıştığınıza bağlı olarak kesin yaklaşımını anlatabilirim. Bu webapp ve bir kodu değiştirmeden performansı artırmak istiyordum. Ama eğer mümkün değilse o zaman veri okuyucusuna değiştireceğim. DataRow nesnesi ile ilgili haklısınız vb. Veri kümesindeki kısıtlama ve ilişki öğelerini yok saymak için bir öznitelik veya bir şey ayarlayabilir miyiz? – Adeem

1

U olasılıkla besleyen ek kriterlere göre sen alma kayıtların sayısını kısıtlayarak düşünmelisiniz SQL Server Mgmt Studio'da (aynı istemci makinede), anında bir yanıt veren prosedür.

Etkilenen tablolardaki dizinleri yeniden oluşturdum ve SQLDataAdapter yanıtı o an için yapıldı.

Bu gecikme davranışını bir SQLDataReader ile daha önce hiç görmedim. Genellikle SQLDataReader kullanıyorum ve bir MyTable.Load (MySQLDataReader) yapıyorum. SQLDataAdapter'den daha az yük var gibi görünüyor.