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}");

C#之Lazy<T>的更多相关文章

  1. 代码的坏味道(15)——冗余类(Lazy Class)

    坏味道--冗余类(Lazy Class) 特征 理解和维护类总是费时费力的.如果一个类不值得你花费精力,它就应该被删除. 问题原因 也许一个类的初始设计是一个功能完全的类,然而随着代码的变迁,变得没什 ...

  2. Mach-O 的动态链接(Lazy Bind 机制)

    ➠更多技术干货请戳:听云博客 动态链接 要解决空间浪费和更新困难这两个问题最简单的方法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态的链接在一起.简单地讲,就是不对那些组成程序的目标文 ...

  3. Lazy Load, 延迟加载图片的 jQuery 插件.

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  4. Hibernate之lazy延迟加载

    一.延迟加载的概念 当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的 ...

  5. nhibernate 中 lazy="no-proxy" 时的问题

    在 nhibernate,如果将实体的一个关联属性配置为 lazy="no-proxy",那么,从其他属性计算出来的属性不能正确更新.例如,将以下代码中 Foo.Bar 配置为 l ...

  6. hibernate 中的 lazy=”proxy” 和 lazy=”no-proxy” 的区别

    网上找到个描述的很精妙的例子 Child   <-   many-to-one   ->Parent         class   Child   {         private   ...

  7. jQuery延迟加载插件(Lazy Load)详解

    最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...

  8. RabbitMQ Lazy Queue 延迟加载

    Lazy Queue 在著名的单例设计模式中就有懒汉式的实现方式,也就是只有在你需要的时候我才去加载. 这让博主想到了以前上学的时候,每到了假期的假期作业,在假期的时候是从来不做的.只有在快开学老师要 ...

  9. CURL命令报错:dyld: lazy symbol binding failed: Symbol not found: _SSL_load_error_strings解决办法

    Mac OS X 10.11.6, curl 命令报错,错误如下: dyld: lazy symbol binding failed: Symbol not found: _SSL_load_erro ...

  10. 004-For与Function进阶实战、Lazy的使用

    004-For与Function进阶实战.Lazy的使用 For进阶 非常常见的形式 可以加入条件表达式进行数据过滤 Function进阶 函数是有值的(默认的话为Unit),所以可以直接将结果赋值给 ...

随机推荐

  1. MySQL Q&A - [01] root密码忘记了怎么办

    题记部分 Windows 场景下 1.先使用管理员身份打开两个命令提示符窗口(winA和winB) 2.在命令提示符窗口winA中将MySQL服务停掉net stop mysql Microsoft ...

  2. halcon中是怎么实现半导体/Led中的GoldenDie的检测方法的 基于局部可变形模板匹配 variation_model模型

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18739196 这篇简单介绍一下halcon中的print_check_single_chars ...

  3. JS处理数据四舍五入(tofixed与round的区别详解)

    1 .tofixed方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字.例如将数据Num保留2位小数,则表示为:toFixed(Num):但是其四舍五入的规则与数学中的规则 ...

  4. go 密码 hash 加密

    目录 bcrypt加密算法原理和应用 简单使用 一起实现一个demo 获取用户输入的密码 Hash & Salt 用户的密码 目前我们做了什么 验证密码 更新 Main 函数 全部代码 bcr ...

  5. linux php安装mongodb 扩展

    下载扩展 首先从这个网站选择适合你当前 php 版本的的 mongodb 扩展 https://pecl.php.net/package/mongodb wget https://pecl.php.n ...

  6. 编写你的第一个 Django 应用程序,第5部分

    本教程从教程 4 停止的地方开始.我们已经构建了一个网络投票应用程序,现在我们将为其创建一些自动化测试. 一.自动化测试简介 1.什么是自动化测试? 测试是检查代码操作的例程. 测试在不同级别运行.一 ...

  7. 通过局域网访问连接 vite 或 Django 之类的项目

    博客地址:https://www.cnblogs.com/zylyehuo/ step1 将 vite 或 Django 类的项目启动 ip 设置为 0.0.0.0:端口 step2 查询本机电脑在当 ...

  8. 【SpringCloud】Zookeeper服务注册与发现

    Zookeeper服务注册与发现 Eureka停止更新了,你怎么办 https://github.com/Netflix/eureka/wiki SpringCloud整合Zookeeper替代Eur ...

  9. SQL 和 PL/SQL 的区别

    不经意看到2个ORA错误,一个提示PL/SQL ORA-错误,另一个提示SQL ORA-错误,好奇这2货啥区别?留爪. PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Lan ...

  10. lombok用法

    加入 maven 依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lo ...