延迟加载

延迟加载,亦称延迟实例化,延迟初始化等,主要表达的思想是,把对象的创建将会延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载。这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使用等。针对于这种做法,似乎称之为即用即创建更为合适些。

例如:一个文章实体类Article,一个文章分类实体类Category,通过Article获取相对应的Category

方法1:在获取Article实体类时,将相对应的Category实体类塞给Article

方法2:要调用Category时,通过Article从数据库中获取

方法3:在Category属性的get访问器中实现读取数据库获取文章分类的代码,这样如果没有使用到Category属性的 时候是不会调用到这些代码的,也就不会去访问数据库拿东西了

 class Program
    {
        static void Main(string[] args)
        {
            ///这行代码表明:要创建一个延迟加载的字符串对象s      
            //////原型为Lazy<T> 对象名=new Lazy<T>(Fun<T>)      
            ///采用泛型委托进行构造,实例化此委托时要求必须是返回值T类型的方法    
            //////如在本例中,T为string,则TestLazy.GetString方法的返回值必须也是string类型   
            Lazy<string> s = new Lazy<string>(TestLazy.GetString);
            Console.WriteLine(s.IsValueCreated);//返回False        
            Console.WriteLine(s.Value); //返回S的当前值       
            Console.WriteLine(s.IsValueCreated);//返回True     
        }
    }
   public class TestLazy
   {
       public static string GetString()
       {
           return DateTime.Now.ToLongTimeString();
       }
   }

http://kb.cnblogs.com/page/90674/

http://kb.cnblogs.com/page/90677/

http://kb.cnblogs.com/page/99182/

http://blog.zhaojie.me/2009/09/standard-lazy-proxy.html

原文地址:https://www.cnblogs.com/hongdada/p/3115638.html