业务场景:

在项目开发中,经常会遇到特定的对象使用的加载问题,有的实例对象我们创建之后并非需要使用,只是根据业务场景来调用,所以可能会导致很多无效的实例加载

延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求。也可以称为,按需加载

代码事例:

1.未进行延迟加载的情况

a.创建学生类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Demo_Lazy_
{/// <summary>/// 学生类/// </summary>public class Student{public Student(){this.Age = 12;Console.WriteLine("调用构造函数");}/// <summary>/// 年龄/// </summary>public int Age { get; set; }}
}

View Code

b.程序入口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Demo_Lazy_
{class Program{/// <summary>/// 程序入口/// </summary>/// <param name="args"></param>static void Main(string[] args){Student student = new Student();Console.WriteLine(student.Age);Console.Read();}        }
}

View Code

c.运行结果:

d.结果说明:

程序运行直接调用了构造函数,在使用Student对象之前

2.使用延迟加载

a.创建学生类:(代码如上1)

    b.程序入口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Demo_Lazy_
{class Program{/// <summary>/// 程序入口/// </summary>/// <param name="args"></param>static void Main(string[] args){Lazy<Student> student = new Lazy<Student>();Console.WriteLine("已创建实例对象");Console.WriteLine("是否显示学生年龄?(0否1是)");string id = Console.ReadLine();if (id == "1"){Console.WriteLine(student.Value.Age);}            Console.ReadLine();}}
}

View Code  

c.运行结果:

首先输入0结果,结果说明:学生对象已创建,但并没有进行实例化,因为业务中没有进行使用

再次运行,输入1,结果说明:学生对象已创建,调用对象实例化方法

事例总结:

        在针对业务功能开发中,如果有对象创建的开销很大,而并非需要立即使用它;如上例中根据界面输入是否显示学生年龄,来动态决定是否实例化学生对象,如果程序启动中对象是需要立即使用的,不建议使用延迟加载,立即加载将提高程序启动的效率;

注: 

       Lazy默认是线程安全的,在多个线程同时运行的情况下,对象的初始化只会被第一个线程调用执行,后续线程的调用执行不会多次创建/调用对象实例

转载于:https://www.cnblogs.com/tiaoshuidenong/p/6378866.html

.NET中的按需加载/延迟加载 LazyT相关推荐

  1. webpack中实现按需加载

    当页面中一个文件过大并且还不一定用到的时候,我们希望在使用到的时候才开始加载这个文件俗称按需加载.这样可以减少页面的响应时间,提高访问速度. 使用webpack打包的出来的文件要实现以上的要求有两种方 ...

  2. vue中路由按需加载的几种方式

    使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...

  3. AngularJS中的按需加载ocLazyLoad

    欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...

  4. vue单文件props写法_vue开发中怎么按需加载需要被填入props和自定义事件的组件?...

    这种场景你可能需要把模态框包装成插件.vue插件开发和组件的区别 - 水秋玄​im.mkinit.com vue插件和组件的区别 使用插件的方式包装组件和直接注册全局组件其实是一样的,都是注册组件.不 ...

  5. devtools 无法加载 sourcemap_用 babel-plugin 实现按需加载

    注意:本文并不是Babel的初学者教程,您需要具备一定的基础知识.在阅读本文前应具备babel基础知识,或者阅读用户手册 本文主要介绍babel的工作流程,插件的工作原理,以及一些在实战中实现按需加载 ...

  6. React-router 4 按需加载的实现方式及原理(Code Splitting)

    React-router 4 介绍了在router4以后,如何去实现按需加载Component,在router4以前,我们是使用getComponent的的方式来实现按需加载的,router4中,ge ...

  7. 【分享】LazyLoad延迟加载(按需加载)

    1:实际需求 大型网站往往很矛盾,想用户在首页看到更多东西,又不想浪费太多服务器流量.比如一个有3屏的首页.可能50%的用户进首页的目的是点击首页的连接,到子页面. 那么我们的网站却为100%的用户加 ...

  8. ionic入门教程第十六课-在微信中使用ionic的解决方案(按需加载加强版)

    对于微信端来说,其实使用ionic是一个比较大的前端框架. 有更多比较轻量化的前端框架可以选择. 但是使用ionic有一个明显的优点就是,能够做到一端开发,三端同步上线. 这个梗说了好多遍了,但确实是 ...

  9. 解决hibernate中的懒加载(延迟加载)问题

    解决hibernate中的懒加载(延迟加载)问题 我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是延迟 ...

最新文章

  1. 计算机在档案管理中的应用,浅谈计算机在档案管理中的应用
  2. POJ3522Slim Span(最大边与最小边差值最小的生成树)
  3. zigbee 初识zigbee,ieee802,论坛
  4. layui选项卡嵌套选项卡_在ProtoPie中使用嵌套组件构建选项卡栏
  5. RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)
  6. Web Hacking 101 中文版 十三、子域劫持
  7. 20211109:DC综合的一些简单概念理解记录
  8. 大学生慕课第二周学习笔记
  9. 【渝粤教育】国家开放大学2018年春季 0695-21T农业企业经营管理 参考试题
  10. Android中的Can't create handler inside thread that has not called Looper.prepare()异常
  11. 爬虫小白第一篇 西刺代理
  12. Java2022面试题集锦
  13. Google Chrome企业咨询服务市场调研报告- 行业发展机遇、市场定位及主要驱动因素
  14. 【2022 ACTF-wp】
  15. 炒鸡酷,IT互联网程序员就业新前景:看极客是怎么靠两个披萨影响世界
  16. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
  17. python读取文件并复制文件
  18. Unable to open underlying table
  19. 区块链技术与密码学联系
  20. 如何在xmd上运行java文件,Junit命令行应用

热门文章

  1. C陷阱与缺陷的学习笔记
  2. JavaScript判断浏览器类型及版本
  3. 从春晚说起:总有一种无耻让我们泪流满面
  4. new Vue 发生了什么
  5. 适用于WIFI Hacking的无线网卡推荐
  6. Java 学习内容总结
  7. TypeScript 初识
  8. 【HDOJ】4333 Revolving Digits
  9. 杭电1276--士兵队列训练问题
  10. 发觉好像视力户籍变差么。。