SetDefaultInitFields

"Yazılımcı yazar, yazmayan kablocudur, sistemcidir" başlıklı yazıda belirttiğim üzere bir Code Generator programı üzerinde çalışıyordum.
 
SqlServer da bulunan Table,Stored Procedure  gibi nesenelere ulaşmak için .Net Framework 1.1 de kullandığımız DMO ( Database Management Object)'nun yerini .Net Frameowrk 2.0 da SMO (Sql Management Object) aldı.
 
SMO ile Sql Server 2005 sürümünde bulunan Stored Procedure ları listediğimde kendi Stored Procedure'lerim ile birlikte 1252 adet System Stored Procedure de geliyor.
 
StoredProcedure sınıfının IsSystemObject özelliğini sınayarak bir ComboBox'a atadığımda ise yine (1252 + kendi SP sayısınız) adet StoredProcedure nesnesi kontrol edilmiş oluyor. Her kontrol sırasında ilgili Stored Procedure objesini tüm özellikleri ile birlikte oluşturulduğu için bu işlem dakikaları aşıyor.
 
Bu problemi aşmak için yaptığım bir araştırmada üstad David Hayden'in sitesinde konu ile ilgili bir ipucuna rastladım :

Server SqlServer = new Server(conn);
SqlServer.SetDefaultInitFields(typeof(StoredProcedure), "IsSystemObject");

 
Server nesnemizi bu şekilde yapılandırdığımızda StoredProced nesnesinin IsSystemObject özelliğini hafızaya ( RAM ) aktarıyor. sorguladığımızda artık SqlServer gidip sormuyor. Hazıfadan okuyor ve sonucu daha hızlı elde ediyoruz.
 
...
foreach (StoredProcedure sp in db.StoredProcedures)
  
if (!sp.I
sSystemObject)
      clbStoredProcedures.Items.Add(sp.Name);
...


Açıklama
db : DataBase nesenesi
clbStoredProcedures : CheckedListBox nesnesi
Filed under: ,

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required)