最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C# Lazy Loading(延遲加載)

 更新時間:2021年04月14日 09:54:37   作者:HueiFeng  
這篇文章主要介紹了C# Lazy Loading(延遲加載)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

前言

按需加載對象延遲加載實際是推遲進行創(chuàng)建對象,直到對其調(diào)用后才進行創(chuàng)建初始化,延遲(懶加載)的好處是提高系統(tǒng)性能,避免不必要的計算以及不必要的資源浪費。

常規(guī)有這些情況:

  • 對象創(chuàng)建成本高且程序可能不會使用它。 例如,假定內(nèi)存中有具有 Orders 屬性的 Customer 對象,該對象包含大量 Order 對象,初始化這些對象需要數(shù)據(jù)庫連接。 如果用戶永遠不要求顯示 Orders 或在計算中使用該數(shù)據(jù),則無需使用系統(tǒng)內(nèi)存或計算周期來創(chuàng)建它。 通過使用 Lazy 來聲明 Orders對象用于遲緩初始化,可以避免在不使用該對象時浪費系統(tǒng)資源。
  • 對象創(chuàng)建成本高,且希望將其創(chuàng)建推遲到其他高成本操作完成后。 例如,假定程序在啟動時加載多個對象實例,但是只需立即加載其中一部分。 可以通過推遲初始化不需要的對象,直到創(chuàng)建所需對象,提升程序的啟動性能。(來源官方)

示例

創(chuàng)建用戶類

 public class User
    {
        public string Name { get; set; }

        public int Age { get; set; }


        public User() {
            this.Name = "Name";
            this.Age = 0;
        }
    }

默認情況下,Lazy 對象是線程安全的。 也就是說,如果構(gòu)造函數(shù)沒有指定線程安全性的類型,該函數(shù)創(chuàng)建的 Lazy 對象是線程安全的。 在多線程方案中,訪問線程安全 Lazy 對象的 Value 屬性的第一個線程會為所有線程上的所有后續(xù)訪問對其初始化,且所有線程共享相同的數(shù)據(jù)。 因此,哪個線程初始化對象并不重要,爭用條件是良性的。

    class Program
    {
        static void Main(string[] args)
        {
            Lazy<User> user = new Lazy<User>();
            ThreadLocal<User> threadLocal = new ThreadLocal<User>();

            if (!user.IsValueCreated)
                Console.WriteLine("The object is not initialized");
            Console.WriteLine(user.Value.Name);
            user.Value.Name = "Name1";
            user.Value.Age = 1;
            Console.WriteLine(user.Value.Name);
            Console.Read();
        }
    }    

對象的線程安全性 LazyThreadSafetyMode mode 參數(shù) 布爾 isThreadSafe 參數(shù) 沒有線程安全性參數(shù)
完全線程安全;一次只有一個線程嘗試初始化值。 ExecutionAndPublication true 可以。
非線程安全。 None false 不適用。
完全線程安全;線程爭用以初始化值。 PublicationOnly 不適用。 不適用。

其中IsValueCreated屬性是個Boolean類型,我們可以通過此屬性去確定當(dāng)前對象有沒有被初始化

調(diào)用后,進行了創(chuàng)建操作

再說說Lazy中幾個構(gòu)造函數(shù),

  • public Lazy (bool isThreadSafe):

isThreadSafe 的布爾參數(shù),該方法參數(shù)用于指定是否從多線程訪問 Value 屬性。 如果想要僅從一個線程訪問屬性,則傳入 false 以獲取適度的性能優(yōu)勢。 如果想要從多線程訪問屬性,則傳入 true 以指示 Lazy 實例正確處理爭用條件(初始化時一個線程引發(fā)異常)。

  • public Lazy (LazyThreadSafetyMode mode):

提供線程安全模式。

  • public Lazy (Func valueFactory):

lambda 表達式傳遞給新的 Lazy 對象的構(gòu)造函數(shù)。 下一次訪問 Value 屬性將導(dǎo)致新 Lazy 的初始化,并且其 Value 屬性此后會返回已分配給該屬性的新值。

參考:

https://docs.microsoft.com/en-us/dotnet/framework/performance/lazy-initialization

以上就是詳解C# Lazy Loading(懶加載)的詳細內(nèi)容,更多關(guān)于C# Lazy Loading(懶加載)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實例詳解

    C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實例詳解

    這篇文章主要介紹了C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法,結(jié)合實例形式詳細分析了C#中構(gòu)造函數(shù)與析構(gòu)函數(shù)的原理、定義、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-06-06
  • WPF調(diào)用WindowsAPI實現(xiàn)屏幕錄制

    WPF調(diào)用WindowsAPI實現(xiàn)屏幕錄制

    這篇文章主要為大家詳細介紹了WPF如何調(diào)用WindowsAPI實現(xiàn)屏幕錄制,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-05-05
  • c# 類型構(gòu)造器

    c# 類型構(gòu)造器

    CLR還支持類型構(gòu)造器,也稱為靜態(tài)構(gòu)造器。c#類型構(gòu)造器可應(yīng)用引用類型和值類型,永遠沒有參數(shù)
    2012-10-10
  • C# 中的委托與事件機制詳解

    C# 中的委托與事件機制詳解

    本文詳細介紹了C#中委托和事件的概念、使用方法和應(yīng)用場景,包括委托定義、匿名方法、Lambda表達式、事件機制和多播委托的詳細說明,委托作為類型安全的函數(shù)指針,文章還探討了如何通過匿名方法和Lambda表達式簡化委托的使用,以及多播委托在事件處理中的應(yīng)用
    2024-10-10
  • C#常見Winform窗體效果詳解

    C#常見Winform窗體效果詳解

    這篇文章主要為大家詳細介紹了C#中常見Winform窗體效果實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C# 中使用隱式和顯式操作符的示例

    C# 中使用隱式和顯式操作符的示例

    這篇文章主要介紹了C# 中使用隱式和顯式操作符的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#多線程經(jīng)典示例(吃蘋果)

    C#多線程經(jīng)典示例(吃蘋果)

    本文主要講述了多線程開發(fā)中經(jīng)典示例,通過本示例,可以加深對多線程的理解。下面跟著小編一起來看下吧
    2017-01-01
  • c#初學(xué)簡單程序?qū)嵗a介紹

    c#初學(xué)簡單程序?qū)嵗a介紹

    這篇文章介紹了c#初學(xué)簡單程序?qū)嵗a,有需要的朋友可以參考一下
    2013-10-10
  • C#隱藏控制臺鍵盤輸入的方法

    C#隱藏控制臺鍵盤輸入的方法

    這篇文章主要介紹了C#隱藏控制臺鍵盤輸入的方法,涉及C#針對系統(tǒng)底層調(diào)用的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#處理文本文件TXT實例詳解

    C#處理文本文件TXT實例詳解

    這篇文章主要介紹了C#處理文本文件TXT的方法,以實例形式詳細分析了txt文本文件的讀取、修改及打印等功能的實現(xiàn)技巧,需要的朋友可以參考下
    2015-02-02

最新評論

松桃| 定结县| 横山县| 镇康县| 太白县| 肥乡县| 惠来县| 连云港市| 阜平县| 阜新市| 乌拉特后旗| 双桥区| 丹东市| 商城县| 江山市| 泰顺县| 开封县| 石台县| 敦化市| 怀柔区| 霍林郭勒市| 叶城县| 西华县| 凤庆县| 常德市| 赣州市| 雅安市| 昆山市| 措勤县| 肥城市| 侯马市| 德惠市| 兴仁县| 海兴县| 九寨沟县| 曲沃县| 镇平县| 华容县| 丽江市| 桃园市| 称多县|