c#中Lazy延迟初始化也称为按需加载,是我们在写程序时经常会遇到的情形。例如创建某一对象时需要花费很大的开销,而这一对象在系统的运行过程中不一定会用到,这时就可以使用Lazy延迟初始化,在第一次使用该对象时再对其进行初始化,如果没有用到则不会进行初始化,这样一来程序的运行效率可以有效提升,也可以使程序占用更少硬件资源,从而优化程序的整体性能。
Lazy 对象初始化默认是线程安全的,在多线程环境下,第一个访问 Lazy 对象的 Value 属性的线程将初始化 Lazy 对象,在此之后访问的线程都将使用第一次初始化的数据
基础语法
Lazy<CiSharp> ci=new Lazy<CiSharp>();
示例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestConsole
{
public class Program
{
private static void Main(string[] args)
{
Lazy<CiSharp> lzy = new Lazy<CiSharp>();
if (!lzy.IsValueCreated)
{
Console.WriteLine("对象还未初始化~");
}
Console.WriteLine($"网站域名是:{lzy.Value.Name}");
if (lzy.IsValueCreated)
{
Console.WriteLine("对象还已初始化~");
}
Console.ReadLine();
}
}
public class CiSharp
{
public string Name { get; set; } = "cisharp.com";
}
}
从上面的结果可以看出,lzy是在输出Name属性时才进行初始化。