中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基(ji)礎才(cai)是重中之重~LazyInitializer.EnsureInitialized對屬性實現化的性能優(you)化

回到目錄

LazyInitializer.EnsureInitialized是frameworks4.0引(yin)入的(de)新東西,實現對屬(shu)性延時(shi)初始化的(de)功能,它作用在System.Threading命(ming)名空間(jian)下,所以(yi),它與多(duo)線程有著密切的(de)關(guan)(guan)系,即當多(duo)人(ren)同步使(shi)用這個方法時(shi),對存儲的(de)對象(xiang)有著某種(zhong)作用,這是msdn的(de)相關(guan)(guan)說明:

這(zhe)個方法可以用(yong)于多(duo)個執行者(zhe)初始化Target目錄對象(xiang)。

在多個(ge)執行者同時(shi)存(cun)取(qu)這個(ge)方法的情(qing)況下,可能會建立多個(ge)T執行個(ge)體,但只(zhi)有一個(ge)執行個(ge)體會存(cun)儲至target。在些類(lei)情(qing)況下,這個(ge)方法將不會放(fang)置(zhi)未(wei)儲存(cun)的對象。如(ru)果(guo)這類(lei)對象必須被放(fang)置(zhi),則由呼叫端判斷未(wei)使的對象,然(ran)后再對物(wu)件進行適當的放(fang)置(zhi)。

對于概(gai)念不(bu)清(qing)楚的(de)同(tong)步(bu),沒有關系,看(kan)下面的(de)例子如完全明白了,呵呵

下面的實例介紹了對屬性的兩個初始化,并進行比較,延時初始化的好處,即在對象使用時再去初始化它當一個方法體中,如果一個對象初始化了一次,不要再進行重復的初始化工作。

代碼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>
        /// 延時(shi)初(chu)始化(hua)指(zhi)定屬性(xing)
        /// </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);
        }

    }

而它們運行的結果,我們可想(xiang)而知(zhi)了,當一(yi)個(ge)類中多(duo)次使用(yong)同一(yi)個(ge)對象時(shi),性(xing)能不好(hao)的,返回的Name(當前時(shi)間),肯定是不同的,而性(xing)能好(hao)的,只初始(shi)化一(yi)次的,返回的Name(當前時(shi)間)肯定是一(yi)個(ge)值(zhi),呵呵。

感謝閱讀!

 回到目錄

posted @ 2013-11-25 11:00  張占嶺  閱讀(3079)  評論(0)    收藏  舉報