Asp.Net Lazy Loading Nedir ?

Herkese merhaba 🙂 Lazy Loading hakkında biraz konuşmak isterim. C# tarafında verileri veri tabanından çekerken kullanılan birkaç metotlar vardır. Bunlar birisi Lazy Loading’dir.

Verileri çekerken sadece istediğimiz tablo değil, istemediğimiz tablo verileri de bir zincirleme şekilde gelebilir. Eğer getirdiğimiz tablo başka tablolar ile ilişkiliyse o tablolarda ki verilerde karşıma gelecektir. Zincirleme kelimesi sanırım anahtar bir kelime olabilir.

İstemediğimiz tabloların verilerinin gelmesi halinde web sitemizin olağan hızı oldukça düşecektir. Sorgular hızı da bir o kadar azalacaktır. Varsayalım ki veritabanında 100 bin kayıt olsun. Örneğin kullanıcıların listesini veri tabanından çekeceğiz ve kullanıcı tablosu ile makale tablosu ilişkili olsun.Tahmin edersiniz ki bir kullanıcının birden fazla yazdığı makale olabilir.

İşte veri tabanından kullanıcı listesini çekerken aslında aynı zamanda her kullanıcının sahip olduğu diğer bir deyişle paylaştığı makaleleri de çekmiş oluyoruz. Bu gerçekten inanılmaz bir performans kaybına sebep olmaktadır.

List<Models.User> getUser = UserManager.Users.ToList();
//Kullanıcıların listesini çekiyoruz

Gördüğünüz gibi kullanıcıların listesini veri tabanından çektim. Ama görüleceği üzer kullanıcı tablosu ile ilişkilendirilmiş bütün tablolarda peşinden sürüklenmiş vaziyette. Örneğin ; ForumPosts. Veri tabanında 10 bin forum postu olduğunu varsayalım o zaman onlarda veri tabanından gelecektir. İşte bunu kesinlikle istemeyiz.

Bu sebeplerden ötürü Lazy Loading seçeneğini kapatmamız gerekmektedir. Context ayarlarında zaten bu seçeneği görürsünüz. “False” yapmanız yeterli olacaktır.

Peki ilişkili tabloları nasıl getireceğim ?

Sadece ihtiyacımız olan tabloları çağırmak bizim için anahtar bir durumdur. Böylelikle gereksiz tablolar çağrılmayacak ve web sayfanızın hızı bir haylı artacaktır. İhtiyacımız olan yerde ihtiyacımız olanı kullanmak en güzelidir.

Bir sonraki makalemde ihtiyacımız olan tabloları nasıl getireceğimize dair durumları sizinle paylaşacağım ama özet geçmem gerekirse Include adlı C# Extension yardımıyla ihtiyacımız olan yerde ve ihtiyacımız olanı çağıracağız.

public List<Forum> GetAllLazy()
        {
            return _forumDal.StringInclude("User", "User.UserInfoe_Id", "ForumPosts","ForumPosts.User", "ForumPosts.User.UserInfoe_Id","ForumTopics");
        }

//Include sayesinde ilişkili tablolarımızı çağırıyoruz. Bunun için repository design pattern'i kullanıldı.

About the author

Add Comment

Bir Cevap Yazın

Blog İstatistikleri

Kategoriler

Arsiv