当前位置: 首页 > 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> 是优化应用程序性能和资源使用的重要工具,特别是在对象创建成本高但可能不需要的情况下。

相关文章:

  • [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):深度剖析数据指标,驱动创业决策
  • 商务部:消费者已累计购买以旧换新家电产品超1亿台
  • 南方将迎三轮降雨,两广旱区的“解渴雨”也要来了
  • 价格周报|本周生猪均价环比上涨,交易均重继续上升
  • 【社论】家政服务提质扩容,为何被一提再提
  • 广西旱情如何?农业厅:近半数农田墒情不足至干旱,本月降雨将渐增
  • 体坛联播|曼联加时赛神奇逆转,晋粤大战CBA再出重磅罚单