久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日焦點(diǎn) 焦點(diǎn)資訊 營銷之道 企業(yè)報(bào)道 淘寶運(yùn)營 網(wǎng)站建設(shè) 軟件開發(fā) 400電話
  當(dāng)前位置: 首頁 » 資訊 » 網(wǎng)站建設(shè) » 正文

C#基礎(chǔ)概念之延遲加載

放大字體  縮小字體 發(fā)布日期:2018-02-18  來源:新格網(wǎng)  作者:新格網(wǎng)  瀏覽次數(shù):993  【去百度看看】
核心提示:延遲加載,亦稱延遲實(shí)例化,延遲初始化等,主要表達(dá)的思想是,把對象的創(chuàng)建將會延遲到使用時(shí)創(chuàng)建,而不是在對象實(shí)例化時(shí)創(chuàng)建對象,即用時(shí)才加載。這種方式有助于提高于應(yīng)用程序的性能,避免浪費(fèi)計(jì)算,節(jié)省內(nèi)存的使用等。針對于這種做法,似乎稱之為即用即創(chuàng)建更為合適些

延遲加載,亦稱延遲實(shí)例化,延遲初始化等,主要表達(dá)的思想是,把對象的創(chuàng)建將會延遲到使用時(shí)創(chuàng)建,而不是在對象實(shí)例化時(shí)創(chuàng)建對象,即用時(shí)才加載。這種方式有助于提高于應(yīng)用程序的性能,避免浪費(fèi)計(jì)算,節(jié)省內(nèi)存的使用等。針對于這種做法,似乎稱之為即用即創(chuàng)建更為合適些。

先來看一下在framework4.0中如何實(shí)現(xiàn)延遲加載。

framework4.0提供了一個(gè)包裝類 Lazy,可以輕松的實(shí)現(xiàn)延遲加載。

  1. ///這行代碼表明:要?jiǎng)?chuàng)建一個(gè)延遲加載的字符串對象s  
  2. ///原型為LazyT> 對象名=new LazyT>(FunT>)  
  3. ///采用泛型委托進(jìn)行構(gòu)造,實(shí)例化此委托時(shí)要求必須是返回值T類型的方法  
  4. ///如在本例中,T為string,則TestLazy.GetString方法的返回值必須也是string類型  
  5. Lazystring> s = new Lazystring>(TestLazy.GetString);  

本例中TestLazy.GetString()方法如下示:

  1. public class TestLazy    
  2. {    
  3. public static string GetString()    
  4. {    
  5. return DateTime.Now.ToLongTimeString();    
  6. }   
  7. }  

可以通過IsValueCreated屬性來確定對象是否已創(chuàng)建,通過Value屬性來獲取當(dāng)前對象的值。

  1. Console.WriteLine(s.IsValueCreated);//返回False  
  2. Console.WriteLine(s.IsValueCreated);//返回True 

下面經(jīng)出完整代碼,以供測試:

  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. ///這行代碼表明:要?jiǎng)?chuàng)建一個(gè)延遲加載的字符串對象s  
  6. ///原型為Lazy 對象名=new Lazy(Fun)  
  7. ///采用泛型委托進(jìn)行構(gòu)造,實(shí)例化此委托時(shí)要求必須是返回值T類型的方法  
  8. ///如在本例中,T為string,則TestLazy.GetString方法的返回值必須也是string類型  
  9. Lazy s = new Lazy(TestLazy.GetString);  
  10. Console.WriteLine(s.IsValueCreated);//返回False  
  11. Console.WriteLine(s.IsValueCreated);//返回True  
  12. }  
  13. }  
  14. public class TestLazy  
  15. {  
  16. public static string GetString()  
  17. {  
  18. return DateTime.Now.ToLongTimeString();  
  19. }  
  20. }  

下面再用一個(gè)例子,演示延遲加載:

在這個(gè)例子中,使用了BlogUser對象,該對象包含多個(gè)Article對象,當(dāng)加載BlogUser對象時(shí),Article對象并不加載,當(dāng)需要使用Article對象時(shí),才加載。

  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. BlogUser blogUser = new BlogUser(1);  
  6. Console.WriteLine("blogUser has been initialized");  
  7. {  
  8. Console.WriteLine(article.Title);}  
  9. }  
  10. }  
  11. public class BlogUser  
  12. {  
  13. public int Id { getprivate set; }  
  14. public Lazy> Articles { getprivate set; }  
  15. public BlogUser(int id)  
  16. {  
  17. this.Id = id;  
  18. Articles =new Lazy>(()=>ArticleServices.GetArticesByID(id));  
  19. Console.WriteLine("BlogUser Initializer");  
  20. }  
  21. }  
  22. public class Article  
  23. {  
  24. public int Id { getset; }  
  25. public string Title{get;set;}  
  26. public DateTime PublishDate { getset;}  
  27. public class ArticleServices  
  28. {  
  29. public static List GetArticesByID(int blogUserID)  
  30. {  
  31. List articles = new List {  
  32. new Article{Id=1,Title="Lazy Load",PublishDate=DateTime.Parse("2011-4-20")},  
  33. new Article{Id=2,Title="Delegate",PublishDate=DateTime.Parse("2011-4-21")},  
  34. new Article{Id=3,Title="Event",PublishDate=DateTime.Parse("2011-4-22")},  
  35. new Article{Id=4,Title="Thread",PublishDate=DateTime.Parse("2011-4-23}  
  36. };  
  37. Console.WriteLine("Article Initalizer");  
  38. return articles;  
  39. }  

運(yùn)行結(jié)果如圖示:

運(yùn)行結(jié)果

最后說一下,延遲加載主要應(yīng)用場景:

當(dāng)創(chuàng)建一個(gè)對象的子對象開銷比較大時(shí),而且有可能在程序中用不到這個(gè)子對象,那么可以考慮用延遲加載的方式來創(chuàng)建子對象。另外一種情況就是當(dāng)程序一啟動時(shí),需要?jiǎng)?chuàng)建多個(gè)對象,但僅有幾個(gè)對象需要立即使用,這樣就可以將一些不必要的初始化工作延遲到使用時(shí),這樣可以非常有效的提高程序的啟動速度。

這種技術(shù)在ORM框架得到了廣泛應(yīng)用,也并非C#獨(dú)有的,比如Java里的Hibernate框架也使用了這一技術(shù)。

 
關(guān)鍵詞: C#基礎(chǔ)概念,延遲加載
長春  短信群發(fā)  吉林省  紅視窗  中國  長春市  玉米  長春網(wǎng)站建設(shè)  網(wǎng)站  振華  設(shè)備  吉林  設(shè)計(jì)  廣州  撲克  聯(lián)合聲明  敘利亞  美國  長春上門維修電腦  內(nèi)蒙古  化武  新聞中心  指示  記者會  美國白宮  化學(xué)武器  塞內(nèi)加爾  白宮  圓桌  小雨  滿洲里  中消協(xié)  敘政府  日本  非洲  中國政府  消費(fèi)者  消費(fèi)者權(quán)益  強(qiáng)臺風(fēng)  北京市  經(jīng)濟(jì)  臺風(fēng)  中非  毒品  中非合作論壇  國家元首  突擊步槍  大阪  海外網(wǎng)  網(wǎng)站建設(shè)  長春上門做系統(tǒng)  重慶市  步槍  長春電腦上門維修  長春上門修電腦  俄羅斯  中國電影  制造  售前咨詢技巧  中國智能建筑節(jié)  政治  北斗導(dǎo)航  龍頭企業(yè)  侯建國,質(zhì)量,中國特色社會主義  產(chǎn)業(yè)園  中國芯  黨委  軍民  位置服務(wù)  長春北大青鳥  黨委書記  中國移動  AJAX  PHP  XML  f-35  特朗普  特朗普,貿(mào)易戰(zhàn),美國  中國軍網(wǎng)  政府  微博  銀河  發(fā)言人  今日頭條  RSS  發(fā)布會  美國人  州長  彈道導(dǎo)彈  一帶一路  塞申斯  運(yùn)載火箭  國際  長春國貿(mào)  小米  尼克松  中國市場  孫儷  短視頻  美國海軍陸戰(zhàn)隊(duì) 
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規(guī)舉報(bào) ]  [ 關(guān)閉窗口 ]

 
0條 [查看全部]  相關(guān)評論

 
網(wǎng)站首頁 | 關(guān)于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權(quán)隱私 | 網(wǎng)站地圖 | 排名推廣 | 廣告服務(wù) | 積分換禮 | 網(wǎng)站留言 | RSS訂閱 | 皖I(lǐng)CP備2021004516號-14
企業(yè)800網(wǎng) · 提供技術(shù)支持