• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#基础 延迟加载介绍与实例

C#基础 延迟加载介绍与实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#开发实例大全基础卷,c#基础与实例教程,c#基础实例,c#web开发实例,c#串口编程实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

延迟加载(lazy loading) 设计模式是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据(读取属性值)的时候,才真正执行数据加载操作.

为了便于理解, 我们来建立一个场景, 假设我们要构造一个Hero(英雄) 类, 每个Hero 有自己的名字和(SpecialSkill)特殊技能.
建模
这是一种建立的方法:

    public Hero(string name)
    {
        Name = name;
        FullName = "Super " + name;
        Skill = new SpecialSkill(name);
    }
}
public class SpecialSkill
{
    public int Power { get; set; }
    public string SkillName { get; set; }
    public int StrengthSpent { get; set; }
    public SpecialSkill(string name)
    {
        Console.WriteLine("loading special skill .....");
        Power = name.Length;
        StrengthSpent = name.Length * 3;
        SkillName = name + " Blazing";
        Console.WriteLine(SkillName + ",... this's what makes a legend!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Hero hero = new Hero("wukong");           
        Console.WriteLine("\n\n.......................Press Enter to continue.......................\n\n");
        Console.Read();
        Console.WriteLine("Hero's special skill: " + hero.Skill.SkillName);
        Console.Read();
        Console.Read();
    }
}
</div>
运行程序后输出如下, 这个例子非常的容易理解, 结果也是显然的.

它的缺点是, 当运行Hero 构造函数的时候, SpecialSkill 的所有属性都已经加载了. 如果我们只想获取这个Hero 的FullName, 我们也加载了SpecialSkill 所有值.

属性的加载延迟
在没有Lazy<T> 以前我们可以这样做:

     }
 }
</div>
即: 修改属性SpecialSkill的加载方法. 那么当我们再运行程序时, 得到的输出就是:

非常好! 这就是我们要的效果, 这样可以让系统更加的有效率.

Lazy<T>
当net framework 引入了Lazy<T> 类后, 我们也可以使用它来实现:

    public Hero(string name)
    {
        Name = name;
        FullName = "Super " + name;

        skill = new Lazy<SpecialSkill>(() => new SpecialSkill(name));
    }
}
</div>
Lazy<T>提供对延迟初始化的支持。而 Lazy<T> 中的一个属性 Value, 则是获取当前 Lazy<T> 实例的延迟初始化值。

Lazy<T>的优势
那么既然我们已经可以用属性缓存的方法实现, 为什么还要引入Lazy<T> ?
至少Lazy<T> 有以下几点优势:
它具有 LazyThreadSafetyMode, 但是我们一般不使用它, 除非是很关键的情况下(在此略去181个字)
它使属性的定义行更加简单
从语义上来讲, 它更加明确, 更加具有可读性
它允许null为有效值

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#反射之基础应用实例总结
  • C#基础之委托用法实例教程
  • C#基础之匿名方法实例教程
  • C#基础 延迟加载介绍与实例

相关文章

  • 2017-05-28C#实现HTTP下载文件的方法
  • 2017-05-28C#基于基姆拉尔森算法计算指定日期是星期几的方法
  • 2017-05-28c#入门之循环语句使用详解(for循环、do/while)
  • 2017-05-28快速解决C# android base-64 字符数组的无效长度问题
  • 2017-05-28C#常用数据结构和算法总结
  • 2017-05-28深入多线程之:深入生产者、消费者队列分析
  • 2017-05-28C#实现将数组内元素打乱顺序的方法
  • 2017-05-28C#程序提示“正由另一进程使用,因此该进程无法访问该文件”的解决办法
  • 2017-05-28c#中SAPI使用总结——SpVoice的使用方法
  • 2017-05-28.net4.5使用async和await异步编程实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • DevExpress实现TreeList向上递归获取符合条件的父节点
    • 自己编写sqlhelper类示例分享
    • C#实现绑定Combobox的方法
    • C#实现插入排序算法实例
    • C#实现启用与禁用本地网络的方式小结【3种方式】
    • C#提示:“在证书存储区中找不到清单签名证书”的解决方法
    • C#利用性能计数器监控网络状态
    • C#实现文件与二进制互转并存入数据库
    • C#画笔使用复合数组绘制单个矩形的方法
    • C#中datatable去重的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有