回到目录

LazyInitializer.EnsureInitialized是frameworks4.0引入的新东西,实现对属性延时初始化的功能,它作用在System.Threading命名空间下,所以,它与多线程有着密切的关系,即当多人同步使用这个方法时,对存储的对象有着某种作用,这是msdn的相关说明:

这个方法可以用于多个执行者初始化Target目录对象。

在多个执行者同时存取这个方法的情况下,可能会建立多个T执行个体,但只有一个执行个体会存储至target。在些类情况下,这个方法将不会放置未储存的对象。如果这类对象必须被放置,则由呼叫端判断未使的对象,然后再对物件进行适当的放置。

对于概念不清楚的同步,没有关系,看下面的例子如完全明白了,呵呵

下面的实例介绍了对属性的两个初始化,并进行比较,延时初始化的好处,即在对象使用时再去初始化它当一个方法体中,如果一个对象初始化了一次,不要再进行重复的初始化工作。

代码1,展现了性能不好的情况

代码2,展现了优化的情况

代码3,微软为了我们进行了封装,在多线程中表现更好

代码1

  1. class TestLazyInitializer1
  2. {
  3.  
  4. public People People
  5. {
  6. get
  7. {
  8.  
  9. return new People();
  10.  
  11. }
  12. }
  13.  
  14. public void Print1()
  15. {
  16. Console.WriteLine(People.Name);
  17. }
  18. public void Print2()
  19. {
  20. Console.WriteLine(People.Name);
  21. }
  22.  
  23. }

代码2:

  1. class TestLazyInitializer2
  2. {
  3. People _people;
  4. public People People
  5. {
  6. get
  7. {
  8.  
  9. return _people == null
  10. ? (_people = new People())
  11. : _people;
  12.  
  13. }
  14. }
  15.  
  16. public void Print1()
  17. {
  18. Console.WriteLine(People.Name);
  19. }
  20. public void Print2()
  21. {
  22. Console.WriteLine(People.Name);
  23. }
  24.  
  25. }

代码3

  1. class TestLazyInitializer
  2. {
  3. private People _people;
  4. /// <summary>
  5. /// 延时初始化指定属性
  6. /// </summary>
  7. public People People
  8. {
  9. get
  10. {
  11. return LazyInitializer.EnsureInitialized(
  12. ref _people, () =>
  13. {
  14. return new People();
  15. });
  16. }
  17. }
  18.  
  19. public void Print1()
  20. {
  21. Console.WriteLine(People.Name);
  22. }
  23. public void Print2()
  24. {
  25. Console.WriteLine(People.Name);
  26. }
  27.  
  28. }

而它们运行的结果,我们可想而知了,当一个类中多次使用同一个对象时,性能不好的,返回的Name(当前时间),肯定是不同的,而性能好的,只初始化一次的,返回的Name(当前时间)肯定是一个值,呵呵。

aaarticlea/png;base64,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" alt="" />

感谢阅读!

回到目录

基础才是重中之重~LazyInitializer.EnsureInitialized对属性实现化的性能优化的更多相关文章

  1. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

  2. 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美

    回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...

  3. 基础才是重中之重~关于ThreadStatic和Quartz的一点渊源

    回到目录 ThreadStatic ThreadStatic是C#里的一个特性,它可以让你的字段在一个线程里有效,但你不能控制这个字段在何时被回收,即如果声明一个int32的字段为ThreadStat ...

  4. 基础才是重中之重~lock和monitor的区别

    回到目录 Monitor的介绍 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中 ...

  5. 基础才是重中之重~Emit动态构建方法(参数和返回值)

    回到目录 对于Emit我们知道它的可以动态构建程序集,类型,方法,属性等,或者说只要手动使用C#创建的东西使用Emit也都可以动态创建它们,Emit由于它的特别之处,所以在很多领域得到了广泛的应用,像 ...

  6. 基础才是重中之重~方法override详解

    回到 目录 之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享. 方法的override,即方法的覆写或者重写 ...

  7. 基础才是重中之重~AutoMapper为已有目标对象映射

    回到目录 AutoMapper各位一定不会陌生,大叔之前的文章中也提到过,曾经也写过扩展方法,以方便程序开发人员去使用它,而在最近,大叔在一个API项目里,在一个POST请求由DTO对象为实体对象赋值 ...

  8. 基础才是重中之重~stream和byte[]的概念与转化

    回到目录 多看几篇 之所以写这篇文章完全是因为最近在研究FastDFS这个分布式的文件存储系统,当然这不是我第一次研究它了,就像我们去看一本书,我们不会只看一篇,而是一次次,一篇篇,每看一次会有新的收 ...

  9. 基础才是重中之重~理解linq中的groupby

    linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用. 对GroupBy的多字段分组,可以看我的这篇文 ...

随机推荐

  1. lambda 表达式 比较时间大小

    data.Orderdetails.Where(r => r.orderstatus == id && DateTime.Compare((DateTime)r.OrderTim ...

  2. C语言小练习一

    题目要求:国王将金币作为工资,发放给忠诚的骑士.第1天,骑士收到一枚金币:之后两天(第2天和第3天)里,每天收到两枚金币:之后三天(第4.5.6天)里,每天收到三枚金币:之后四天(第7.8.9.10天 ...

  3. 如何在win上搭建SVN服务器

    本博文转自:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本, ...

  4. UnicodeEncodeError: 'ascii' codec can't encode characters in position问题的解决办法

    今天刚开始用ulipad写python代码 代码如下 #! /usr/bin/env python#coding=utf-8a = int(raw_input('请输入一个数:'))if a<1 ...

  5. java中打印变量地址

    在java中打印变量的地址 这个代码是在startoverflow上看到的,跟大家分享一下. import sun.misc.Unsafe; import java.lang.reflect.Fiel ...

  6. PROC SORT

    PROC SORT DATA=输入数据集 <OUT=输出数据集><选项>; BY 关键变量; RUN; PROC SORT 语法如上,其中在尖括号中的可以不出现,也不会报错. ...

  7. javascript练习-子类调用父类的构造函数和方法

    function NonNullSet(){ Set.apply(this,arguments); } NonNullSet.prototype = inherit(Set.prototype); N ...

  8. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  9. 查询Oracle锁表和解决方法

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

  10. 连接MySQL数据库(android、php、MySQL)

    管理MySQL数据库最简单和最便利的方式是PHP脚本.运行PHP脚本使用HTTP协议和android系统连接.我们以JSON格式编码数据,因为Android和PHP都有现成的处理JSON函数. 下面示 ...