基础才是重中之重~LazyInitializer.EnsureInitialized对属性实现化的性能优化_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 基础才是重中之重~LazyInitializer.EnsureInitialized对属性实现化的性能优化

基础才是重中之重~LazyInitializer.EnsureInitialized对属性实现化的性能优化

 2013/11/25 13:25:43  张占岭  博客园  我要评论(0)
  • 摘要:LazyInitializer.EnsureInitialized是frameworks4.0引入的新东西,实现对属性延时初始化的功能,它作用在System.Threading命名空间下,所以,它与多线程有着密切的关系,即当多人同步使用这个方法时,对存储的对象有着某种作用,这是msdn的相关说明:这个方法可以用于多个执行者初始化Target目录对象。在多个执行者同时存取这个方法的情况下,可能会建立多个T执行个体,但只有一个执行个体会存储至target。在些类情况下
  • 标签:实现 性能优化 优化

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

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

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

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

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

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

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

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

代码1

  class TestLazyInitializer1
    {

        public People People
        {
            get
            {

                return new People();

            }
        }

        public void Print1()
        {
            Console.WriteLine(People.Name);
        }
        public void Print2()
        {
            Console.WriteLine(People.Name);
        }

    }

代码2:

 class TestLazyInitializer2
    {
        People _people;
        public People People
        {
            get
            {

                return _people == null
                    ? (_people = new People())
                    : _people;

            }
        }

        public void Print1()
        {
            Console.WriteLine(People.Name);
        }
        public void Print2()
        {
            Console.WriteLine(People.Name);
        }

    }

代码3

 class TestLazyInitializer
    {
        private People _people;
        /// <summary>
        /// 延时初始化指定属性
        /// </summary>
        public People People
        {
            get
            {
                return LazyInitializer.EnsureInitialized(
                    ref _people, () =>
                    {
                        return new People();
                    });
            }
        }

        public void Print1()
        {
            Console.WriteLine(People.Name);
        }
        public void Print2()
        {
            Console.WriteLine(People.Name);
        }

    }

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

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" alt="" />

感谢阅读!

 

 

发表评论
用户名: 匿名