云梦网站建设,工作人员否认陈道明演庆余年2,婚纱网站建设,在线资源搜索引擎咨询区 danyolgiax最近我在看关于 LazyT 的资料#xff0c;链接#xff1a;https://sankarsan.wordpress.com/2009/10/04/laziness-in-c-4-0-lazyt #xff0c; 看是看完了#xff0c;但我始终想不明白它的应用场景有哪些#xff1f;回答区 Matthew如果你在项目中… 咨询区 danyolgiax最近我在看关于 LazyT 的资料链接https://sankarsan.wordpress.com/2009/10/04/laziness-in-c-4-0-lazyt 看是看完了但我始终想不明白它的应用场景有哪些回答区 Matthew如果你在项目中使用过双检索来实现 单例模式 模式的话对下面的代码肯定不会陌生。private static object lockingObject new object();
public static LazySample InstanceCreation()
{if(lazilyInitObject null){lock (lockingObject){if(lazilyInitObject null){lazilyInitObject new LazySample ();}}}return lazilyInitObject ;
}那现在这种写法已经太low了完全可以用 LazyT 来替换使用它是一个线程安全懒实现的方式参考如下代码public sealed class Singleton
{// Because Singletons constructor is private, we must explicitly// give the LazySingleton a delegate for creating the Singleton.private static readonly LazySingleton instanceHolder new LazySingleton(() new Singleton());private Singleton(){...}public static Singleton Instance{get { return instanceHolder.Value; }}
}DespertarLazyT 一个很好的真实示例是使用 ORM对象关系映射器例如 Entity Framework 和 NHibernate。假设您有一个实体 Customer它具有 Name、PhoneNumber 和 Orders 属性, Name 和 PhoneNumber 是常规的字符串类型但 Orders 是一个导航属性它返回的是 Customer 曾经下过的成百上千的订单。你可能经常想要查看所有客户的信息并获取他们的 Name 和 Phoneumber 来给他们打电话。这是太普通不过的业务需求了但想象一下如果你每次获取客户都把和他相关的上千条订单给拉出来的话其实这些订单你目前是不需要的这就是完全的浪费资源理想的场景 Order 应该是延迟加载除非你确实需要它们。点评区 LazyT 确实非常好用可以让你更加专注于业务少写一些累赘代码但本质上它的底层是用 lock 实现的参考如下代码private void ExecutionAndPublication(LazyHelper executionAndPublication, bool useDefaultConstructor)
{lock (executionAndPublication){if (_state executionAndPublication){if (useDefaultConstructor){ViaConstructor();}else{ViaFactory(LazyThreadSafetyMode.ExecutionAndPublication);}}}
}