【C#】延迟加载

来源:互联网 发布:北航 英语专业的 知乎 编辑:程序博客网 时间:2024/06/04 18:25

前言

        看C#三层实例的时候,听到老师讲了一个延迟加载的概念,但是他没有明说,我查阅了相关资料,大致懂了延迟加载的含义。

什么是延迟加载?

        延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。可以简单理解为,只有在使用的时候,才会发出sql语句进行查询。

作用

        通过延迟加载的定义我们不难发现,延迟加载的作用就是为了提高我们代码运行的效率,在实例化一个类时,如果用的到类中的方法,再去加载,如果用不到,就直接跳过,这样,节省了计算机的运算时间,避免了空间的浪费。

有效期

        延迟加载的有效期是在session打开的情况下,当session关闭后,会报异常。当调用load方法加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句。

实例

Login.Model.UserInfo user = null;while (reader.Read()){    if (user==null)    {        user = new Login.Model.UserInfo();    }    user.ID = reader.GetInt32(0);    user.UserName = reader.GetString(1);    user.Password = reader.GetString(2);    if(!reader.IsDBNull(3))    {        user.Email = reader.GetString(3);    }}
        视频中,就是这段代码出现了延迟加载,那先在我们分析一下,为什么说它用了延迟加载。
        while(reader.Read())后面有一个判断,如果user==null,那么实例化UserInfo,延迟加载了UserInfo的实例化。

应用场景

        当创建一个对象的子对象开销比较大时,而且有可能在程序中用不到这个子对象,那么可以考虑用延迟加载的方式来创建子对象。另外一种情况就是当程序一启动时,需要创建多个对象,但仅有几个对象需要立即使用,这样就可以将一些不必要的初始化工作延迟到使用时,这样可以非常有效的提高程序的启动速度。
2 0