志在指尖
用双手敲打未来

C# Lazy Loading

前言
按需加载目标推延加载实践是推延进行创立目标,直到对其调用后才进行创立初始化,推延(懒加载)的好处是提高体系功能,防止不必要的核算以及不必要的资源糟蹋。
常规有这些状况:
目标创立本钱高且程序或许不会运用它。例如,假定内存中有具有Orders特点的Customer目标,该目标包括大量Order目标,初始化这些目标需求数据库连接。假如用户永远不要求显现Orders或在核算中运用该数据,则无需运用体系内存或核算周期来创立它。经过运用Lazy来声明Orders目标用于迟缓初始化,能够防止在不运用该目标时糟蹋体系资源。
目标创立本钱高,且希望将其创立推延到其他高本钱操作完成后。例如,假定程序在发动时加载多个目标实例,可是只需立即加载其间一部分。能够经过推延初始化不需求的目标,直到创立所需目标,提升程序的发动功能。
示例
创立用户类
Copy
publicclassUser{publicstringName{get;set;}publicintAge{get;set;}publicUser(){this.Name=”Name”;this.Age=0;
}
}
默许状况下,Lazy目标是线程安全的。也就是说,假如结构函数没有指定线程安全性的类型,该函数创立的Lazy目标是线程安全的。在多线程计划中,拜访线程安全Lazy目标的Value特点的第一个线程会为所有线程上的所有后续拜访对其初始化,且所有线程同享相同的数据。因而,哪个线程初始化目标并不重要,争用条件是良性的。
Copy
classProgram{staticvoidMain(string[]args){
Lazyuser=newLazy();
ThreadLocalthreadLocal=newThreadLocal();if(!user.IsValueCreated)
Console.WriteLine(“Theobjectisnotinitialized”);
Console.WriteLine(user.Value.Name);
user.Value.Name=”Name1″;
user.Value.Age=1;
Console.WriteLine(user.Value.Name);
Console.Read();
}
}
目标的线程安全性LazyThreadSafetyModemode参数布尔isThreadSafe参数没有线程安全性参数
彻底线程安全;一次只要一个线程测验初始化值。ExecutionAndPublicationtrue能够。
非线程安全。Nonefalse不适用。
彻底线程安全;线程争用以初始化值。PublicationOnly不适用。不适用。
其间IsValueCreated特点是个Boolean类型,我们能够经过此特点去确定当时目标有没有被初始化
调用后,进行了创立操作
再说说Lazy中几个结构函数,
publicLazy(boolisThreadSafe):
isThreadSafe的布尔参数,该方法参数用于指定是否从多线程拜访Value特点。假如想要仅从一个线程拜访特点,则传入false以获取适度的功能优势。假如想要从多线程拜访特点,则传入true以指示Lazy实例正确处理争用条件(初始化时一个线程引发异常)。
publicLazy(LazyThreadSafetyModemode):提供线程安全模式。
publicLazy(FuncvalueFactory):
lambda表达式传递给新的Lazy目标的结构函数。下一次拜访Value特点将导致新Lazy的初始化,而且其Value特点此后会回来已分配给该特点的新值。

未经允许不得转载:IT技术网站 » C# Lazy Loading
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载