.NET中的按需加载/延迟加载 LazyT
业务场景:
在项目开发中,经常会遇到特定的对象使用的加载问题,有的实例对象我们创建之后并非需要使用,只是根据业务场景来调用,所以可能会导致很多无效的实例加载
延迟初始化出现于.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相关推荐
- webpack中实现按需加载
当页面中一个文件过大并且还不一定用到的时候,我们希望在使用到的时候才开始加载这个文件俗称按需加载.这样可以减少页面的响应时间,提高访问速度. 使用webpack打包的出来的文件要实现以上的要求有两种方 ...
- vue中路由按需加载的几种方式
使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...
- AngularJS中的按需加载ocLazyLoad
欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...
- vue单文件props写法_vue开发中怎么按需加载需要被填入props和自定义事件的组件?...
这种场景你可能需要把模态框包装成插件.vue插件开发和组件的区别 - 水秋玄im.mkinit.com vue插件和组件的区别 使用插件的方式包装组件和直接注册全局组件其实是一样的,都是注册组件.不 ...
- devtools 无法加载 sourcemap_用 babel-plugin 实现按需加载
注意:本文并不是Babel的初学者教程,您需要具备一定的基础知识.在阅读本文前应具备babel基础知识,或者阅读用户手册 本文主要介绍babel的工作流程,插件的工作原理,以及一些在实战中实现按需加载 ...
- React-router 4 按需加载的实现方式及原理(Code Splitting)
React-router 4 介绍了在router4以后,如何去实现按需加载Component,在router4以前,我们是使用getComponent的的方式来实现按需加载的,router4中,ge ...
- 【分享】LazyLoad延迟加载(按需加载)
1:实际需求 大型网站往往很矛盾,想用户在首页看到更多东西,又不想浪费太多服务器流量.比如一个有3屏的首页.可能50%的用户进首页的目的是点击首页的连接,到子页面. 那么我们的网站却为100%的用户加 ...
- ionic入门教程第十六课-在微信中使用ionic的解决方案(按需加载加强版)
对于微信端来说,其实使用ionic是一个比较大的前端框架. 有更多比较轻量化的前端框架可以选择. 但是使用ionic有一个明显的优点就是,能够做到一端开发,三端同步上线. 这个梗说了好多遍了,但确实是 ...
- 解决hibernate中的懒加载(延迟加载)问题
解决hibernate中的懒加载(延迟加载)问题 我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是延迟 ...
最新文章
- 计算机在档案管理中的应用,浅谈计算机在档案管理中的应用
- POJ3522Slim Span(最大边与最小边差值最小的生成树)
- zigbee 初识zigbee,ieee802,论坛
- layui选项卡嵌套选项卡_在ProtoPie中使用嵌套组件构建选项卡栏
- RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)
- Web Hacking 101 中文版 十三、子域劫持
- 20211109:DC综合的一些简单概念理解记录
- 大学生慕课第二周学习笔记
- 【渝粤教育】国家开放大学2018年春季 0695-21T农业企业经营管理 参考试题
- Android中的Can't create handler inside thread that has not called Looper.prepare()异常
- 爬虫小白第一篇 西刺代理
- Java2022面试题集锦
- Google Chrome企业咨询服务市场调研报告- 行业发展机遇、市场定位及主要驱动因素
- 【2022 ACTF-wp】
- 炒鸡酷,IT互联网程序员就业新前景:看极客是怎么靠两个披萨影响世界
- 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
- python读取文件并复制文件
- Unable to open underlying table
- 区块链技术与密码学联系
- 如何在xmd上运行java文件,Junit命令行应用