Lazy loading is a pattern which delay initialization of object. C# 4.0 introduced new class which defers the creation of expensive objects when not in use. In this article I’ll explain the use of Lazy<T> class. Suppose we have Customer class and one customer can have many Accounts, if you want show Accounts for one customer, you need to load accounts associated with customer. Loading of accounts can make performance hit badly if data is huge while initializing Customer object. To avoid this situation Lazy loading comes for rescue. Loading of Accounts will only happen when you will use accounts list. This will make sure fast loading of customer object and give performance boost to application. Here I am explaining example of Customer and Accounts relationship by Lazy loading:First we create entity classes of Customer and Account:public class Account
{
public int Id { get; set; } }
public class Customer
{
public string Name { get; set; }
public int CustomerId { get; set; } public List GetAccounts()
{
return lazylist.Value;
} Lazy<List<Account>> lazylist; public Customer(string name, int id)
{
Console.WriteLine("Initializing Customer Object");
Name = name;
CustomerId = id;
lazylist = new Lazy<List<Account>>(() => { return GetAccountList(id); });
Console.WriteLine("Initialization done");
} private List GetAccountList(int id)
{
Console.WriteLine("Loading Accounts:");
List list = new List();
Parallel.For(100, 110, (int i) =>
{
Account a = new Account();
a.Id = i;
list.Add(a);
});
return list;
}
}Read more: Beyond relational
QR:
{
public int Id { get; set; } }
public class Customer
{
public string Name { get; set; }
public int CustomerId { get; set; } public List GetAccounts()
{
return lazylist.Value;
} Lazy<List<Account>> lazylist; public Customer(string name, int id)
{
Console.WriteLine("Initializing Customer Object");
Name = name;
CustomerId = id;
lazylist = new Lazy<List<Account>>(() => { return GetAccountList(id); });
Console.WriteLine("Initialization done");
} private List GetAccountList(int id)
{
Console.WriteLine("Loading Accounts:");
List list = new List();
Parallel.For(100, 110, (int i) =>
{
Account a = new Account();
a.Id = i;
list.Add(a);
});
return list;
}
}Read more: Beyond relational
QR: