LinQtoSQL “Delay Loaded”

12 Ekim
2009

LinQtoSQL kullanmak için bir dbml’i yarattınız, içerisine gerekli gördüğünüz tabloları eklediniz bağlantılarını kurdunuz ve projenizde mutlu ve mesut bir biçimde kullanıyorsunuz diyelim. Bir sorun yaşayana kadar yeni şeyler öğrenmeyi red eden benim gibi bir yapıdaysanız “Delay Loaded” özelliğinin ne olduğunu içi dolu dolu byte array’ler ile çalışmadan araştırmazsınız sanıyorum.

Bir tane tablomuzda bir kolon var tipi VARBINARY(MAX) kısaca limiti belli olmayan byte dizisi olarak tanımlanmış. Kullanım amacımız bir çoğumuzun yaptığı gibi dosyaları veritabanına yerleştirmek için. Şimdi siz bu tabloyu dbml’e ekleyip sorguyu aldığınızda oluşturulacak class’ın içerisinin (siz o içeriği hiç kullanmasanız bile) doldurulduğunu tahmin etmek zor değil. Ki bir sorgu alıp 10 dakika cevap vermesini beklediğinizde bir şeylerin ters gittiğini daha rahat kavrayabiliyorsunuz.

Sorun basit; sorgu anında class oluşturulurken diğer tüm kolonlar için olduğu gibi bu kolonunda içinin doldurulması. Bu kolondaki veriler benim yaşadığım örnekte olduğu gibi 20 – 50 mb aralığında ise bu bekleme süresi daha da inanılmaz boyutlara ulaşıyor. Daha acı verici nokta ise ben bu kolonun sadece sayısını kullanıcıya göstermek için bu kadar işkenceyi yaratıyor olmam. Kullanıcı sadece “bu kayda bağlı 10 dosya var” verisini görmesi için yaklaşık 100 er mb veri veritabanından uygulama sunucusuna aktarılıyor.

İşte bu noktada benim gibi tembel programcıları kurtaran bir özellik olarak ortaya çıkıyor “delay loaded” dbml içerisinde ilgili tablonun ilgili kolonunun bu özelliğini true yaptığımızda LinQtoSQL bu kolonu sadece kullanılacağı zaman veritabanından alıyor. Diğer zamanlarda içi boş olarak kalıyor. Ufak bir ayrıntı belki ama başardıkları oldukça büyük…

Yorumlar kapalı.

başa dön