首页 > 编程语言 >C#之Lazy<T>

C#之Lazy<T>

时间:2024-03-20 23:46:05浏览次数:20  
标签:Lazy Console C# 对象 线程 WriteLine 加载

Lazy<T>主要用在单例模式,是一种延迟加载(Lazy Loading)的机制,它允许您推迟对象的创建直到第一次访问该对象。这种方式在需要时才分配资源,能够提高性能和资源利用率。Lazy类提供了一个简单且线程安全的方法来实现延迟加载。以下是Lazy的一些主要特点和用法:
延迟加载:Lazy允许您将对象的创建推迟到第一次访问该对象的时候,而不是在对象被创建时就立即分配资源。

线程安全:Lazy在多线程环境下是线程安全的,它会确保只有一个线程创建对象,其他线程在对象创建完成之前会被阻塞。

性能优化:Lazy的延迟加载机制能够在应用程序启动时节省资源,只有在需要时才会执行实际的对象创建过程。

异常处理:如果对象的创建过程中发生了异常,Lazy会捕获并将异常包装在后续访问对象时抛出。

支持初始化:Lazy提供了多种构造函数,允许您传入一个委托来初始化对象,或者指定延迟加载的行为。

int count = 0;
Lazy<string> lazyStr = new Lazy<string>(() =>
{
    Console.WriteLine("Lasy Loading...Only once,Only needed!");
    count += 1;
    return "Hello,LasyStr";
});
Console.WriteLine($"Try to fetch lasyStr:{lazyStr.Value}");
Console.WriteLine($"Try to fetch lasyStr again:{lazyStr.Value}");
Console.WriteLine($"Try to fetch lasyStr again:{lazyStr.Value}");
Console.WriteLine($"now,count is {count}");

标签:Lazy,Console,C#,对象,线程,WriteLine,加载
From: https://www.cnblogs.com/johnyang/p/18086390

相关文章

  • golang 中 channel cap设为1原理 | 有无缓冲的channel
    在golang中,如果涉及消息传递或者是并发控制等,我们常常用到channel,channel的具体原理这里不讨论,今天主要看看有无缓冲以及缓冲值的设计。无缓冲的channel联系channel的数据结构mchan可知,就没得buf,但sendqrecvq这些肯定都是有的,所以在无缓冲的channel中,如果写者写入ch......
  • 深入理解 SpringMVC
    前言SpringMVC可以说是我们日常开发中最依赖的Spring组件了,它基于Servlet容器实现,允许我们通过注解的方式开发Web程序。在本篇文章,将深入SpringMVC源码,梳理SpringMVC对Web请求处理流程,弄懂相关核心组件的原理,最终做到在使用的时候知其然也知其所以然。一、接受并分......
  • 每日一题:C语言经典例题之实数的小数部分
    题目描述输入一个实数,输出该实数的小数部分,小数部分若多余的末尾0,请去掉。如输入111111.12345678912345678900则输出0.123456789123456789。若去掉末尾0之后小数部分为0,则输出“Nodecimalpart”。注意该实数的位数不超过100位。输入输入一个实数。输出输出该实数的小......
  • 9.JavaWeb& javaScript基础
    目录导语:一、JavaWeb概述二、JavaScript基础概念:功能:1.基本语法(1)与html结合方式(2)注释(3)数据类型(4)变量(5)运算符(6)流程控制语句:(7)JS特殊语法:案例:99乘法表2.基本对象(1)Function:函数(方法)对象(2)Array:数组对象(3)Boolean(4)Date:日期对象(5)Math:数学对象(6)Number(7)String(8......
  • 常用命令--curl
    常用命令--curlcurl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符......
  • 综合架构-5 实时同步服务-rsync+crond+inotify
    综合架构-5实时同步服务-rsync+crond+inotify增量实时备份-监控状态-利用rsync+inotify+crond实现服务端和客户端b互相免密连接ssh-keygencd/root/.sshmvid_rsa.pubauthorized_keysscp-r/root/.ssh10.0.1.113:/root企业文件目录增量实时同步删......
  • 集中式注册表(Centralized Registry)分布式注册表(Distributed Registry)
    集中式注册表(CentralizedRegistry)是指在计算机系统中,将多个应用程序或服务的配置信息、参数设置等数据集中存储在一个统一的注册表中的管理方式。在Windows操作系统中,注册表(Registry)就是一个典型的集中式注册表系统。作用:统一管理:集中式注册表可以让多个应用程序共享同一份......
  • C++ 函数模板
    C++函数模板函数模板在C++中,函数模板是一种允许函数以一种类型无关的方式来操作的工具。它们使得函数能够处理不同类型的数据而不需要为每种类型编写重复的代码。函数模板的核心思想是“参数化类型”,这意味着在定义函数时,可以使用一个或多个通用类型参数,而在函数被调用时......
  • ThreadLocal详解及用法示例
    ThreadLocal概念ThreadLocal 是Java并发包(java.util.concurrent)中提供的一个类,它的主要作用是在多线程环境下为每个线程提供一个独立的变量副本,使得每个线程在访问 ThreadLocal 时获取到的都是自己的私有变量,而不是共享的同一个变量。换句话说,ThreadLocal 能够隔离线程间......
  • PyTorch 深度学习(GPT 重译)(二)
    四、使用张量表示真实世界数据本章内容包括将现实世界的数据表示为PyTorch张量处理各种数据类型从文件加载数据将数据转换为张量塑造张量,使其可以作为神经网络模型的输入在上一章中,我们了解到张量是PyTorch中数据的构建块。神经网络将张量作为输入,并产生张......