当前位置: 首页 > news >正文

C# 延迟初始化 LazyT

概念:延时初始化重点是延时,用时加载,意思是对象在使用的时候创建而不是在实例化的的时候才创建。
 
延时加载主要应用的场景:
  • 数据层( ADO.NET或Entity Framework等ORM,Java里面的Hibernate也用到了这种技术)
  • 反射(加载assemblier,type,MEF)
  • 缓存对象,领域实体
  • 单例模式
 
其二,就是其线程安全问题。用单例模式举例,如下是经常看到的代码:
        public sealed class Singleton
        {
            private static Singleton instance = null;
            private Singleton()
            {
            }
            public static Singleton Instance
            {
                get
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
        }
 
这段代码如果只有一个线程使用,也并不会出现问题;其问题是多线程使用时,两个不同的线程可能都对其进行了访问,如果(instance==null)结果为true,则都创建了实例,这违反了singleton模式。
 
如下是使用Lazy实现线程安全的解决方案:
 
public sealed class Singleton
 {
     private static readonly Lazy<Singleton> lazy =
         new Lazy<Singleton>(() => new Singleton());
      
     public static Singleton Instance { get { return lazy.Value; } }
 
     private Singleton()
     {
     }
 } 
 
MSDN相关说明: https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?redirectedfrom=MSDN&view=netframework-4.8
关于单例模式各种写法的分析: https://csharpindepth.com/Articles/Singleton

转载于:https://www.cnblogs.com/Juning/p/11549080.html

相关文章:

  • xampp+zend
  • 检测网站日常运行
  • Python快速教程 (手册)
  • 对于最近想读的书
  • react-------生命周期只getDerivedStateFromPros
  • SQL Server 查询远程数据库数据
  • es6和es5函数参数和arguments的差别
  • 响应式设计(Response Web Design)浅谈
  • 查询 ip占用导致ip不通的 问题 查IP对应的mac地址
  • 删除MyEclipse 6.5.1自带的Maven4MyEclipse
  • ulimt 和 sysctl
  • linux /etc/profile bashrc bash_profile
  • 多服务器的日志合并统计——apache日志的cronolog轮循
  • systemctl daemon-reload
  • Unicast
  • 【mysql】环境安装、服务启动、密码设置
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Babel配置的不完全指南
  • ES6语法详解(一)
  • java多线程
  • nodejs调试方法
  • Python学习笔记 字符串拼接
  • React-redux的原理以及使用
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 基于axios的vue插件,让http请求更简单
  • 记一次和乔布斯合作最难忘的经历
  • 算法-图和图算法
  • 详解NodeJs流之一
  • python最赚钱的4个方向,你最心动的是哪个?
  • 回归生活:清理微信公众号
  • ​​​​​​​​​​​​​​Γ函数
  • (39)STM32——FLASH闪存
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (阿里云万网)-域名注册购买实名流程
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net接口调试与案例
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中 MVC 工厂模式浅析
  • .NET中GET与SET的用法
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • [ 蓝桥杯Web真题 ]-布局切换
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [AAuto]给百宝箱增加娱乐功能
  • [BZOJ 1040] 骑士
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [gdc19]《战神4》中的全局光照技术
  • [Gym-102091E] How Many Groups
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [LeetCode]—Copy List with Random Pointer 深度复制带“任意指针”的链表
  • [Linux] day07——查看及过滤文本