.NET?Framework?4.5?有哪些特性-創(chuàng)新互聯(lián)

.NET Framework 4.5 有哪些特性?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

為靖州等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及靖州網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都做網(wǎng)站、靖州網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!  簡介

  自.NET 4.5發(fā)布已經(jīng)過了差不多1年了。但是隨著最近微軟大多數(shù)的發(fā)布,與.NET開發(fā)者交流的問題顯示,開發(fā)者僅知道一到兩個特性,其他的特性僅僅停留在MSDN并以簡單的文檔形式存在著。

  比如說,當你問一個.NET開發(fā)者.NET框架內(nèi)核中有什么新東西的時候,他們中的大多數(shù)僅僅會說異步與等待(至少和我交談的人們僅僅談到了這些特性)。

  另外也很難貫通所有的新特性。因為這些特性可能對于你目前正在開發(fā)的工作并不如聽上去那么有趣。

  所以在這篇文章中我想提及我喜歡的5個在.NET4.5內(nèi)核中的特性。當然,這可能只是我喜歡的而并不是你的。但是我所做的是當我選擇這些特性時我也想著較大的.NET社區(qū),我希望我滿足了這種期望。

.NET?Framework?4.5?有哪些特性

  提示:這篇文章沒有討論在ASP.NET, WCF, WPF, WWF等中的新特性。僅僅講了關(guān)于內(nèi)核的新特性。

  特性1:異步與等待(代碼開發(fā)者)

  這個特性已經(jīng)被吹噓過度并且每個.NET布道者都談?wù)撍5沁@仍然是我喜歡的并且你會知道為什么從這里只有幾行。

.NET?Framework?4.5?有哪些特性

  異步和等待是標記,它們標記當任務(wù)(線程)結(jié)束時控制應(yīng)該恢復(fù)到代碼的位置。

  讓我們嘗試通過下面的代碼來搞清上面聲明的含義。如果你明白下面代碼的流程:

  1. Static void main()從開始處調(diào)用Method()方法。

  2. Method()方法產(chǎn)生一個名為LongTask的任務(wù)(線程),線程將等待10秒。

  3. 同時,在調(diào)用了任務(wù)之后,控制又回到Method()方法繼續(xù)執(zhí)行剩下的代碼。換句話說,正如調(diào)用時多線程的(Task.Run…),LongTask仍在運行。例如,等待10秒并且Method()方法剩下的代碼也在執(zhí)行。

  現(xiàn)在在相同的情景下,我們想要第3步執(zhí)行得不一樣。我們想要在LongTask()執(zhí)行完成后,控制應(yīng)該回到Method方法執(zhí)行接下來的代碼?!爱惒健焙汀暗却标P(guān)鍵字能夠幫助實現(xiàn)上面的功能。

.NET?Framework?4.5?有哪些特性

  這里有三個關(guān)于關(guān)鍵字“異步”和“等待”的重點需要記?。?/p>

  1. 異步和等待是一對關(guān)鍵字。你不能獨立使用它們。

  2. 異步應(yīng)用于方法。這個關(guān)鍵字是一個標志,是說該方法會有一個等待關(guān)鍵字。

  3. 等待關(guān)鍵字標記了任務(wù)恢復(fù)執(zhí)行的位置。所以你總是發(fā)現(xiàn)這個關(guān)鍵字與Task關(guān)聯(lián)。

  下面是前面討論的代碼的修訂版本,這里我們應(yīng)用了異步與等待。所有其他的步驟仍然如前所述,但是“步驟3”將在“步驟2”完成之后執(zhí)行。簡單來說就是控制在任務(wù)完成之后回到Method()方法。

.NET?Framework?4.5?有哪些特性

  現(xiàn)在你已經(jīng)閱讀了“異步”與“等待”的內(nèi)容,讓我來提個問題。上面的代碼同樣也能通過Task.Wait或者Task.ContinueWith實現(xiàn),那么它們有什么不同?我把這個問題留作給你的家庭作業(yè)。

  特性2:便利Zip壓縮(Zip壓縮)

.NET?Framework?4.5?有哪些特性

  Zip是最為人所接受的文件格式之一。Zip格式以某些內(nèi)置的名字被幾乎所有操作系統(tǒng)支持。

  • 在Windows操作系統(tǒng)中,它以“壓縮文件”的名稱實現(xiàn)。

  • 在MAC操作系統(tǒng)中,它以“文檔實用程序”的名稱實現(xiàn)。

  現(xiàn)在在.NET中我們對執(zhí)行Zip壓縮沒有內(nèi)置的支持。許多開發(fā)者實用第三方組件如“DotnetZip”。在.NET4.5中,Zip屬性內(nèi)置于框架本身,以System.IO.Compression的命名空間內(nèi)置。

  第一步你需要引用兩個命名空間:

  • System.IO.Compression.FileSystem

  • System.IO.Compression

  接下來引用如下兩個命名空間:

using System.IO.Compression;

  如果你想要從文件夾壓縮文件你可以調(diào)用如下所示的CreateFromDirectory函數(shù)。

ZipFile.CreateFromDirectory(@"D:\data",@"D:\data.zip");

  如果你想要解壓,你可以調(diào)用如下代碼所示的ExtractToDirectory函數(shù)。

ZipFile.ExtractToDirectory(@"D:\data.zip", @"D:\data\unzip");
  特性3:正則表達式超時(超時)

.NET?Framework?4.5?有哪些特性

  “正則表達式”一直是做驗證選的方式。如果你是正則表達式的新手,請看正則表達式,我解釋了正則表達式是如何執(zhí)行的。但是正因為正則表達式的典型邏輯解析使得它暴露于DOS攻擊下。讓我們試著理解剛才我說的。

  作為例子請考慮這樣的正則表達式-“^(\d+)$”。這個正則表達式表明只能有數(shù)字。你也可以看正則表達式符號圖,它標明了這個正則表達式會如何求值?,F(xiàn)在讓我們假設(shè)要驗證“123456X”。這將有6條路徑如下圖所示。

.NET?Framework?4.5?有哪些特性

  但如果我們再多加一個數(shù)字進去,將會有7條路徑。換句話說,隨著字符長度的增加,正則表達式將會花更多時間執(zhí)行。也就是說,求值時間與字符長度成線性比例。

.NET?Framework?4.5?有哪些特性

  現(xiàn)在讓我們把之前定義的正則式從“^(\d+)$”變?yōu)椤癪(\d+)+$”。如果你看正則表達式符號圖它將相當復(fù)雜。如果我們現(xiàn)在試著驗證“123456X”,將會有32條路徑。如果你再增加一個字符,路徑數(shù)將會增加到64。

.NET?Framework?4.5?有哪些特性

  換句話說,上面的正則表達式中時間開銷與字符數(shù)目為成倍關(guān)系。

.NET?Framework?4.5?有哪些特性

  現(xiàn)在你可能要問的是,這很重要嗎?線性上升的求值時間可以被黑客利用來進行DOS(拒絕服務(wù))攻擊。他們可以部署一個長而且是足夠長的字符串來使你的應(yīng)用永遠掛起。

  對于這個問題合適的解決方法是在正則表達式執(zhí)行上設(shè)置超時時間。好消息是,在.NET4.5中你可以定義一個超時屬性如下代碼所示。所以如果你收到任何懷有惡意的字符串,應(yīng)用不會永遠在循環(huán)中執(zhí)行。

try
{
  var regEx = new Regex(@”^(\d+)+$”, RegexOptions.Singleline, TimeSpan.FromSeconds(2));
  var match = regEx.Match(“123453109839109283090492309480329489812093809x”);
}
catch (RegexMatchTimeoutException ex)
{
  Console.WriteLine(“Regex Timeout”);
}
  特性4:優(yōu)化配置文件(提升啟動性能)

.NET?Framework?4.5?有哪些特性

  我們都知道.NET代碼是半編譯的格式。在運行時,JIT(Just-in-Time)編譯器執(zhí)行并且轉(zhuǎn)換這種半編譯的IL代碼為機器原生代碼。對JIT大的抱怨之一是當.NET應(yīng)用初次執(zhí)行的時候,它運行得很慢因為JIT在忙著轉(zhuǎn)換IL代碼到機器代碼。

  為了降低這個啟動時間,在.NET4.5中有稱為“優(yōu)化配置文件”的內(nèi)容。配置文件不過是一個記錄了應(yīng)用在啟動運行中需要的方法列表的簡單文件。所以當應(yīng)用開始后,后臺的JIT執(zhí)行并且開始轉(zhuǎn)換這些方法的IL代碼為機器/原生語言。

  這個后臺JIT在多個處理器上編譯啟動方法從而進一步降低啟動時間。另外請注意你需要多核處理器來實現(xiàn)配置文件優(yōu)化。如果你沒有多核處理器那么這個設(shè)定會被忽略。

.NET?Framework?4.5?有哪些特性

  為了創(chuàng)建“配置文件”這個文件,首先你需要引入System.Runtime命名空間。然后你可以調(diào)用靜態(tài)類ProfileOptimization的SetProfileRoot和StartProfile方法?,F(xiàn)在當應(yīng)用啟動后臺JIT,它將會讀取配置文件并且在后臺編譯啟動方法從而降低啟動時間。

using System.Runtime;

// Call the Setprofilerroot and Startprofile method
ProfileOptimization.SetProfileRoot(@"D:\ProfileFile");

ProfileOptimization.StartProfile("ProfileFile");

  重要提示:ASP.NET 4.5和Silverlight 5應(yīng)用默認支持Profileoptimization。所以上述代碼在這些技術(shù)中無需編寫。

  特性5:垃圾回收(垃圾后臺清理)

.NET?Framework?4.5?有哪些特性

  垃圾回收在.NET應(yīng)用中是一項真正繁重的任務(wù)。當是ASP.NET應(yīng)用的時候,它變得更繁重。ASP.NET應(yīng)用在服務(wù)器運行,許多客戶端向服務(wù)器發(fā)送請求從而產(chǎn)生對象負荷,使得垃圾回收確實努力清理不需要的對象。

.NET?Framework?4.5?有哪些特性

  在.NET4.0中,當垃圾回收運行清理的時候,所有的應(yīng)用程序線程都暫停了。在上圖中你可以看到我們有3個應(yīng)用程序線程在執(zhí)行。有兩個垃圾回收運行在不同的線程上。一個垃圾回收線程對應(yīng)一個邏輯處理器?,F(xiàn)在應(yīng)用程序線程運行并執(zhí)行它們的任務(wù),伴隨著這些應(yīng)用程序線程的執(zhí)行它們也創(chuàng)建了操作對象。

  在某個時間點,后臺垃圾回收運行開始清理。當這些垃圾回收開始清理的時候,它們暫停了所有的應(yīng)用程序線程。這使得服務(wù)器/應(yīng)用程序在那一刻不響應(yīng)了。

.NET?Framework?4.5?有哪些特性

  為了克服上述問題,服務(wù)器垃圾回收被引進了。在服務(wù)器垃圾回收機制中多創(chuàng)建了一個運行在后臺的線程。這個線程在后臺運行并持續(xù)清理2代對象(關(guān)于垃圾回收0,1和2代的視頻)從而降低主垃圾回收線程的開銷。由于雙垃圾回收線程的執(zhí)行,主應(yīng)用程序線程很少被暫停,進而增加了應(yīng)用程序吞吐量。為了使用服務(wù)器垃圾回收,我們需要使用gcServer XML標簽并且將它置為true。

<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration>
  另三個值得探索的特性

  設(shè)置默認應(yīng)用程序域的區(qū)域性

  在上一個版本的.NET中如果我想設(shè)置區(qū)域性那么我需要在每個線程中設(shè)置。下面的示例程序演示了在線程級別設(shè)置區(qū)域性的痛苦。當我們有大量多線程應(yīng)用程序的時候這是真正的痛苦。

CultureInfo cul = new CultureInfo(strCulture);
Thread.CurrentThread.CurrentCulture = cul;
Thread.CurrentThread.CurrentUICulture = cul;

  在4.5中我們可以在應(yīng)用程序域級別設(shè)置區(qū)域性并且所有在這個應(yīng)用程序域當中的線程都會繼承這個區(qū)域性。下面就是如何實現(xiàn)DefaultThreadCurrentCulture的示例代碼。

CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR");

CultureInfo.DefaultThreadCurrentCulture = culture;

  數(shù)組支持超過2GB容量

  我不確定在什么樣的情景下我們會需要2GB的容器。所以我個人并不清楚我們將在哪用到這個特性。如果我曾需要如此之大的容器我會把它分解成小份。但我確信在框架中啟用此功能應(yīng)該有個很好的理由。

  控制臺支持Unicode編碼

  我把這個特性留在討論范圍之外是因為非常少的人用控制臺程序工作。我曾見過有人把控制臺用于學術(shù)目的??偠灾覀儸F(xiàn)在也對控制臺應(yīng)用有了Unicode編碼支持。

  引用

  • http://msdn.microsoft.com/en-us/library/ms171868.aspx

  • Mr Sukesh marla的精彩文章ASP.NET 4.5 new features

  當你有空的時候,一定來看看我的網(wǎng)站 www.questpond.com關(guān)于.NET4.5面試問和答,我已經(jīng)在這方面有了不少努力。

.NET?Framework?4.5?有哪些特性

看完上述內(nèi)容,你們掌握.NET Framework 4.5 有哪些特性的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

新聞標題:.NET?Framework?4.5?有哪些特性-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://muchs.cn/article38/pgesp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、外貿(mào)建站、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營