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

C#—Lazy<T> 类型(延迟初始化/懒加载模式)

C# 的 Lazy<T> 类型

Lazy<T> 是 C# 中的一个类,用于实现延迟初始化(懒加载)模式。它提供了一种线程安全的方式来延迟创建大型或资源密集型对象,直到第一次实际需要时才进行初始化。

主要特点

  1. 延迟初始化:对象只有在第一次被访问时才会创建

  2. 线程安全:默认情况下是线程安全的,可以确保在多线程环境中只初始化一次

  3. 性能优化:避免不必要的资源消耗,特别是对于可能不会使用的资源

基本用法

// 创建一个延迟初始化的对象
Lazy<ExpensiveObject> lazyObject = new Lazy<ExpensiveObject>();// 实际访问时才会创建对象
ExpensiveObject obj = lazyObject.Value;

构造函数选项

  1. 无参数构造函数:使用类型的默认构造函数

    Lazy<MyClass> lazy = new Lazy<MyClass>();
  2. 使用初始化函数

    Lazy<MyClass> lazy = new Lazy<MyClass>(() => new MyClass("param"));
  3. 指定线程安全模式

    // 非线程安全模式(性能更高,适用于单线程)
    Lazy<MyClass> lazy = new Lazy<MyClass>(LazyThreadSafetyMode.None);

实际应用场景

  1. 大型资源(如图像、文件)的延迟加载

  2. 数据库连接的延迟建立

  3. 计算密集型对象的延迟创建

  4. 依赖注入框架中的服务延迟实例化

示例

public class ExpensiveService
{public ExpensiveService(){Console.WriteLine("ExpensiveService created!");// 模拟耗时初始化Thread.Sleep(1000);}public void DoWork() => Console.WriteLine("Working...");
}class Program
{static void Main(){Lazy<ExpensiveService> lazyService = new Lazy<ExpensiveService>();Console.WriteLine("Lazy object created, but service not initialized yet");// 只有在访问Value属性时才会初始化lazyService.Value.DoWork();// 后续访问不会重新初始化lazyService.Value.DoWork();}
}

输出:

Lazy object created, but service not initialized yet
ExpensiveService created!
Working...
Working...

Lazy<T> 是优化应用程序性能和资源使用的重要工具,特别是在对象创建成本高但可能不需要的情况下。

http://www.dtcms.com/a/146797.html

相关文章:

  • [wifiI]CCA
  • qemu构建arm环境(AI生成)
  • 用74HC595芯片就可做一个SPI组件
  • 【NLP 68、R-BERT】
  • C 语言开发问题:使用 <assert.h> 时,定义的 #define NDEBUG 不生效
  • Transformer框架解析:从“Attention is All You Need”到现代AI基石
  • 20.3 使用技巧9
  • 回车键监听
  • NLP与社区检测算法的结合:文本中的社区发现
  • OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()
  • Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍
  • flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试
  • WINDOWS下使用命令行读取本地摄像头FFMPEG+DirectShow,ffplay直接播放摄像头数据
  • 安装ntfs硬盘系统时,报错Error: Unable to find a match: epel-release的解决方法
  • Federated Feature Augmentation and Alignment
  • ECharts散点图-散点图13,附视频讲解与代码下载
  • 机器学习-08-推荐算法-案例
  • Cad c# 射线法判断点在多边形内外
  • 淘宝店铺详情API接口返回数据说明
  • 精益数据分析(10/126):深度剖析数据指标,驱动创业决策
  • EXCEL学习
  • 天元证券|AI驱动需求井喷 光模块上市公司业绩爆发
  • Oracle for Linux安装和配置(11)——Linux配置
  • 深入理解 DML 和 DQL:SQL 数据操作与查询全解析
  • Spring Boot 集成 Redis 实战总结
  • 智能对讲机:通信技术的革新与“危急特”场景的守护者
  • 【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
  • C++如何处理多线程环境下的异常?如何确保资源在异常情况下也能正确释放
  • 【scikit-learn基础】--『监督学习』之 均值聚类
  • Android 15强制edge-to-edge全面屏体验