前言
按需加载对象延迟加载实际是推迟进行创建对象,直到对其调用后才进行创建初始化,延迟(懒加载)的好处是提高系统性能,避免不必要的计算以及不必要的资源浪费。
常规有这些情况:
示例
创建用户类
public class user { public string name { get; set; } public int age { get; set; } public user() { this.name = "name"; this.age = 0; } }
默认情况下,lazy
其中isvaluecreated属性是个boolean类型,我们可以通过此属性去确定当前对象有没有被初始化 调用后,进行了创建操作 再说说lazy中几个构造函数, public lazy (bool isthreadsafe): public lazy (lazythreadsafetymode mode):提供线程安全模式。 public lazy (func 参考:
class program
{
static void main(string[] args)
{
lazy<user> user = new lazy<user>();
threadlocal<user> threadlocal = new threadlocal<user>();
if (!user.isvaluecreated)
console.writeline("the object is not initialized");
console.writeline(user.value.name);
user.value.name = "name1";
user.value.age = 1;
console.writeline(user.value.name);
console.read();
}
}
对象的线程安全性
lazythreadsafetymode mode 参数
布尔 isthreadsafe 参数
没有线程安全性参数
完全线程安全;一次只有一个线程尝试初始化值。
executionandpublication
true
可以。
非线程安全。
none
false
不适用。
完全线程安全;线程争用以初始化值。
publicationonly
不适用。
不适用。
isthreadsafe 的布尔参数,该方法参数用于指定是否从多线程访问 value 属性。 如果想要仅从一个线程访问属性,则传入 false 以获取适度的性能优势。 如果想要从多线程访问属性,则传入 true 以指示 lazy
lambda 表达式传递给新的 lazy
总结
如对本文有疑问, 点击进行留言回复!!
C# 对PDF文档加密、解密(基于Spire.Cloud.SDK for .NET)
Unity通用泛型单例设计模式(普通型和继承自MonoBehaviour)
网友评论