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

一文读懂 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.dtcms.com/a/325990.html

相关文章:

  • (三十二)-java+ selenium自动化测试-select 下拉框
  • Linux运维学习第十四周
  • wed前端第三次作业
  • 营销 “远交近攻”:开辟市场新天地-中小企实战运营和营销工作室博客
  • MySQL数据库简介
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • 贪心----3. 跳跃游戏 II
  • 计算机网络:1、OSI参考模型和TCP/IP模型
  • 天塌了!HCIE数通实验预计今年Q4变题,难度再上升?!
  • Linux ethernet驱动移植之常见问题
  • 【Docker-Day 13】超越默认Bridge:精通Docker Host、None与自定义网络模式
  • 从 0 到 1:用 MyCat 打造可水平扩展的 MySQL 分库分表架构
  • 【算法专题训练】11、字符串中的变位词
  • 类和对象(中上)
  • 计算机网络---DNS(域名系统)
  • Go 语言中的切片排序:从原理到实践玩转 sort 包
  • 【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(6)贪婪编码,temperature及tok原理及实现
  • 云服务器部署SSM项目
  • 逻辑备份恢复工具gs_dump/gs_restore
  • Apache Ignite分片线程池深度解析
  • app,h5,微信,携带传递参数的两种方法getCurrentPages()
  • LAMP/LNMP示例
  • Unknown collation: ‘utf8mb4_0900_ai_ci‘
  • thymeleaf 日期格式化显示
  • 基于 ZooKeeper 的分布式锁实现原理是什么?
  • Vue 利用el-table和el-pagination组件,简简单单实现表格前端分页
  • 【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
  • QT_QUICK_BACKEND 环境变量详解(AI生成)
  • Linux中配置DNS
  • 在 Rocky Linux 9.2 上使用 dnf 安装 Docker 全流程详解