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

一文读懂 C# 中的 Lazy<T>

一文读懂 C# 中的 Lazy

  • 一、Lazy<T> 是什么
  • 二、推荐应用场景
  • 三、实战 Demo
    • 基础用法
    • 进阶用法:单例模式的实现
      • 单例类
      • 使用单例类
  • 四、核心方法和属性阐释
    • LazyThreadSafetyMode 枚举值
    • 构造函数
    • 常用属性
  • 五、避坑指南、注意事项
  • 六、总结与决策

一文读懂 C# 中的 Lazy

在 C# 编程中,有时我们希望某个对象的初始化过程延迟到真正需要使用它的时候,这样可以提高程序的性能,减少不必要的资源占用。Lazy 类型就为我们提供了这样的功能

一、Lazy 是什么

Lazy 是 C# 中用于延迟初始化的类型。其核心作用就是将对象的创建推迟到首次访问该对象的时候,而不是在声明变量时就进行创建。有以下特点:

  • 延迟性:就像你有个任务,但你可以选择在真正要用到这个任务结果的时候才去执行它,而不是一开始就着手去做。Lazy 允许我们把对象的初始化操作推迟到首次访问 Value 属性的时候
  • 线程安全性:Lazy 提供了不同级别的线程安全模式,可以确保在多线程环境下对象的正确初始化和访问

Lazy 自.NET Framework 4.0 开始引入。后续版本核心功能稳定,无重大功能或用法变化。只要项目基于.NET Framework 4.0 及以上版本,都能正常使用

二、推荐应用场景

Lazy虽然强大,但并非所有场景都适用。以下这些场景尤其适合它发挥优势:

  • 数据库连接:数据库连接的建立通常开销较大。使用 Lazy 可以在真正需要执行数据库操作时才创建连接,避免程序启动时就占用过多资源
  • 大型对象创建:比如创建一个庞大的配置对象,初始化过程复杂且可能在程序运行过程中不一定会用到,此时使用 Lazy 可以延迟初始化,提升程序启动速度
  • 资源加载:加载文件、图片等资源时,如果不是程序一开始就需要的,通过 Lazy 可以在需要展示或使用这些资源时才进行加载
  • 单例模式优化:实现单例模式时,用 Lazy 可以做到线程安全的延迟初始化

三、实战 Demo

基础用法

下面的代码展示了 Lazy 的基本使用,延迟初始化一个简单的字符串对象:

class Program
{static void Main(){// 声明一个 Lazy<string> 对象,推迟字符串的初始化Lazy<string> lazyString = new Lazy<string>(() => "延迟初始化的字符串");// 判断此时字符串是否被创建Console.WriteLine("在访问 Value 之前,字符串是否已初始化: " + lazyString
http://www.xdnf.cn/news/17667.html

相关文章:

  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • Edit Distance
  • react中父子数据流动和事件互相调用(和vue做比较)
  • GO学习记录三
  • 基于MongoDB/HBase的知识共享平台的设计与实现
  • 【Dv3Admin】菜单转换选项卡平铺到页面
  • Excel 连接阿里云 RDS MySQL
  • 5G 非地面网络(NTN)最专业的方案
  • 高并发场景下分布式ID生成方案对比与实践指南
  • 在 .NET Core 5.0 中启用 Gzip 压缩
  • 从ELF到进程间通信:剖析Linux程序的加载与交互机制
  • 玩转Docker | 使用Docker部署Trilium Notes知识库工具
  • 5G NTN 卫星测试产品
  • word格式设置-论文写作,样式,字号等
  • WPF之绑定!
  • LeetCode——241.为运算表达式设计优先级
  • 在 RHEL9 上搭建企业级 Web 服务(Tomcat)
  • Android Audio实战——获取活跃音频类型(十五)
  • 深度学习与遥感入门(五)|GAT 构图消融 + 分块全图预测:更稳更快的高光谱图分类(PyTorch Geometric 实战)
  • 【数据可视化-86】中国育儿成本深度可视化分析(基于《中国统计年鉴2023》数据):用Python和pyecharts打造炫酷可视化大屏
  • 论文阅读 arxiv 2024 MemGPT: Towards LLMs as Operating Systems
  • Apache IoTDB 全场景部署:基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DB+AI
  • Java 之抽象类和接口
  • SSH远程连接TRAE时显示权限被拒绝检查方案
  • 可视化程序设计(4) - 第一个图形窗口程序