簡介
自.NET 4.5發布已經過了差不多1年了。但隨著最近微軟大多數的發布,與.NET開發者交流的問題顯示,開發者僅知道一到兩個特性,其他的特性僅僅停留在MSDN並以簡單的文檔形式存在著。
比如說,當你問一個.NET開發者.NET框架核心中有什麼新東西的時候,他們中的大多數只是會說異步與等待(至少和我交談的人們僅僅談到了這些特性)。
另外也很難貫通所有的新特性。因為這些特性可能對於你目前正在開發的工作並不如聽起來那麼有趣。
所以在這篇文章中我想提及我喜歡的5個在.NET4.5核心中的特性。當然,這可能只是我喜歡的而不是你的。但我所做的是當我選擇這些特性時我也想著較大的.NET社區,我希望我滿足了這種期望。
提示:這篇文章沒有討論在ASP.NET, WCF, WPF, WWF等中的新功能。僅僅講了關於核心的新特性。
特性1:異步與等待(程式碼開發者)
這個特性已經被吹噓過度並且每個.NET佈道者都談論它。但是這仍然是我喜歡的並且你會知道為什麼從這裡只有幾行。
非同步和等待是標記,它們標記當任務(執行緒)結束時控制應該恢復到程式碼的位置。
讓我們試著透過下面的程式碼來搞清上面聲明的含義。如果你明白下面程式碼的流程:
Static void main()從開始處呼叫Method()方法。
Method()方法產生一個名為LongTask的任務(執行緒),執行緒將等待10秒。
同時,在呼叫了任務之後,控制又回到Method()方法繼續執行剩下的程式碼。換句話說,正如調用時多線程的(Task.Run…),LongTask仍在運行。例如,等待10秒並且Method()方法剩下的程式碼也在執行。
現在在相同的情境下,我們想要第3步執行得不一樣。我們想要在LongTask()執行完成後,控制權應該會回到Method方法執行接下來的程式碼。 「非同步」和「等待」關鍵字能夠幫助實現上面的功能。
這裡有三個關於關鍵字「非同步」和「等待」的重點需要記住:
非同步和等待是一對關鍵字。你不能獨立使用它們。
非同步應用於方法。這個關鍵字是一個標誌,是說該方法會有一個等待關鍵字。
等待關鍵字標記了任務復原執行的位置。所以你總是發現這個關鍵字與Task關聯。
下面是前面討論的程式碼的修訂版本,這裡我們應用了非同步與等待。所有其他的步驟仍然如前所述,但是“步驟3”將在“步驟2”完成之後執行。簡單來說就是控制在任務完成之後回到Method()方法。
現在你已經閱讀了「非同步」與「等待」的內容,讓我來提個問題。上面的程式碼同樣也能透過Task.Wait或Task.ContinueWith實現,那麼它們有什麼不同?我把這個問題留作給你的家庭作業。
特性2:便利Zip壓縮(Zip壓縮)
Zip是最為人所接受的檔案格式之一。 Zip格式以某些內建的名字幾乎所有作業系統支援。
在Windows作業系統中,它以「壓縮檔案」的名稱實作。
在MAC作業系統中,它以「文件實用程式」的名稱實作。
現在在.NET中我們對執行Zip壓縮沒有內建的支援。許多開發者實用第三方元件如“DotnetZip”。在.NET4.5中,Zip屬性內建於框架本身,以System.IO.Compression的命名空間內建。
第一步你需要引用兩個命名空間:
#System.IO.Compression.FileSystem
#System.IO.Compression
接下來引用如下兩個命名空間:
using System.IO.Compression;
如果你想要從資料夾壓縮檔案你可以呼叫如下所示的CreateFromDirectory函數。
ZipFile.CreateFromDirectory(@"D:\data",@"D:\data.zip");
如果你想要解壓縮,你可以呼叫如下程式碼所示的ExtractToDirectory函數。
ZipFile.ExtractToDirectory(@"D:\data.zip", @"D:\data\unzip");
特性3:正規表示式逾時(逾時)
「正規表示式」一直是做驗證首選的方式。如果你是正規表示式的新手,請看正規表示式,我解釋了正規表示式是如何執行的。但是正因為正規表示式的典型邏輯解析使得它暴露於DOS攻擊下。讓我們試著理解剛才我說的話。
作為範例請考慮這樣的正規表示式-「^(\d+)$」。這個正規表示式表示只能有數字。你也可以看正規表示式符號圖,它標示了這個正規表示式會如何求值。現在讓我們假設要驗證「123456X」。這將有6條路徑如下圖所示。
但如果我們再多加一個數字進去,將會有7條路徑。換句話說,隨著字元長度的增加,正規表示式將會花更多時間執行。也就是說,求值時間與字元長度成線性比例。
現在讓我們把先前定義的正規式從「^(\d+)$」變成「^(\d+)+$」。如果你看正規表示式符號圖它將相當複雜。如果我們現在試著驗證“123456X”,將會有32條路徑。如果你再增加一個字符,路徑數將會增加到64。
換句話說,上面的正規表示式中時間開銷與字元數目為倍數關係。
現在你可能要問的是,這很重要嗎?線性上升的求值時間可以被駭客利用來進行DOS(拒絕服務)攻擊。他們可以部署一個長而且是足夠長的字串來使你的應用程式永遠掛起。
對於這個問題合適的解決方法是在正規表示式執行上設定逾時時間。好消息是,在.NET4.5中你可以定義一個超時屬性如下程式碼所示。所以如果你收到任何懷有惡意的字串,應用程式不會永遠在循環中執行。
try { var regEx = new Regex(@”^(\d+)+$”, RegexOptions.Singleline, TimeSpan.FromSeconds(2)); var match = regEx.Match(“123453109839109283090492309480329489812093809x”); } catch (RegexMatchTimeoutException ex) { Console.WriteLine(“Regex Timeout”); }
特性4:最佳化設定檔(提升啟動效能)
我們都知道.NET程式碼是半編譯的格式。在執行時,JIT(Just-in-Time)編譯器執行並且轉換這種半編譯的IL程式碼為機器原生程式碼。對JIT最大的抱怨之一是當.NET應用初次執行的時候,它運行得很慢因為JIT在忙著轉換IL代碼到機器代碼。
為了降低這個啟動時間,在.NET4.5中有稱為「最佳化設定檔」的內容。設定檔不過是一個記錄了應用在啟動運行中所需的方法清單的簡單檔案。所以當應用程式開始後,後台的JIT執行並且開始轉換這些方法的IL程式碼為機器/原生語言。
這個後台JIT在多個處理器上編譯啟動方法從而進一步降低啟動時間。另外請注意你需要多核心處理器來實現設定檔優化。如果你沒有多核心處理器那麼這個設定會被忽略。
为了创建“配置文件”这个文件,首先你需要引入System.Runtime命名空间。然后你可以调用静态类ProfileOptimization的SetProfileRoot和StartProfile方法。现在当应用启动后台JIT,它将会读取配置文件并且在后台编译启动方法从而降低启动时间。
using System.Runtime; // Call the Setprofilerroot and Startprofile method ProfileOptimization.SetProfileRoot(@"D:\ProfileFile"); ProfileOptimization.StartProfile("ProfileFile");
重要提示:ASP.NET 4.5和Silverlight 5应用默认支持Profileoptimization。所以上述代码在这些技术中无需编写。
特性5:垃圾回收(垃圾后台清理)
垃圾回收在.NET应用中是一项真正繁重的任务。当是ASP.NET应用的时候,它变得更繁重。ASP.NET应用在服务器运行,许多客户端向服务器发送请求从而产生对象负荷,使得垃圾回收确实努力清理不需要的对象。
在.NET4.0中,当垃圾回收运行清理的时候,所有的应用程序线程都暂停了。在上图中你可以看到我们有3个应用程序线程在执行。有两个垃圾回收运行在不同的线程上。一个垃圾回收线程对应一个逻辑处理器。现在应用程序线程运行并执行它们的任务,伴随着这些应用程序线程的执行它们也创建了操作对象。
在某个时间点,后台垃圾回收运行开始清理。当这些垃圾回收开始清理的时候,它们暂停了所有的应用程序线程。这使得服务器/应用程序在那一刻不响应了。
为了克服上述问题,服务器垃圾回收被引进了。在服务器垃圾回收机制中多创建了一个运行在后台的线程。这个线程在后台运行并持续清理2代对象(关于垃圾回收0,1和2代的视频)从而降低主垃圾回收线程的开销。由于双垃圾回收线程的执行,主应用程序线程很少被暂停,进而增加了应用程序吞吐量。为了使用服务器垃圾回收,我们需要使用gcServer XML标签并且将它置为true。
<configuration> <runtime> <gcserver></gcserver> </runtime> </configuration>
另三个值得探索的特性
设置默认应用程序域的区域性
在上一个版本的.NET中如果我想设置区域性那么我需要在每个线程中设置。下面的示例程序演示了在线程级别设置区域性的痛苦。当我们有大量多线程应用程序的时候这是真正的痛苦。
CultureInfo cul = new CultureInfo(strCulture); Thread.CurrentThread.CurrentCulture = cul; Thread.CurrentThread.CurrentUICulture = cul;
在4.5中我们可以在应用程序域级别设置区域性并且所有在这个应用程序域当中的线程都会继承这个区域性。下面就是如何实现DefaultThreadCurrentCulture的示例代码。
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); CultureInfo.DefaultThreadCurrentCulture = culture;
数组支持超过2GB容量
我不确定在什么样的情景下我们会需要2GB的容器。所以我个人并不清楚我们将在哪用到这个特性。如果我曾需要如此之大的容器我会把它分解成小份。但我确信在框架中启用此功能应该有个很好的理由。
控制台支持Unicode编码
我把这个特性留在讨论范围之外是因为非常少的人用控制台程序工作。我曾见过有人把控制台用于学术目的。总而言之,我们现在也对控制台应用有了Unicode编码支持。
引用
http://msdn.microsoft.com/en-us/library/ms171868.aspx
Mr Sukesh marla的精彩文章ASP.NET 4.5 new features
当你有空的时候,一定来看看我的网站 www.questpond.com关于.NET4.5面试问和答,我已经在这方面有了不少努力。
以上是.NET Framework 4.5 五個很棒的功能分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

C#.NET應用的測試策略包括單元測試、集成測試和端到端測試。 1.單元測試確保代碼的最小單元獨立工作,使用MSTest、NUnit或xUnit框架。 2.集成測試驗證多個單元組合的功能,常用模擬數據和外部服務。 3.端到端測試模擬用戶完整操作流程,通常使用Selenium進行自動化測試。

C#高級開發者面試需要掌握異步編程、LINQ、.NET框架內部工作原理等核心知識。 1.異步編程通過async和await簡化操作,提升應用響應性。 2.LINQ以SQL風格操作數據,需注意性能。 3..NET框架的CLR管理內存,垃圾回收需謹慎使用。

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。

C#.NET是構建微服務的熱門選擇,因為其生態系統強大且支持豐富。 1)使用ASP.NETCore創建RESTfulAPI,處理訂單創建和查詢。 2)利用gRPC實現微服務間的高效通信,定義和實現訂單服務。 3)通過Docker容器化微服務,簡化部署和管理。

C#和.NET的安全最佳實踐包括輸入驗證、輸出編碼、異常處理、以及身份驗證和授權。 1)使用正則表達式或內置方法驗證輸入,防止惡意數據進入系統。 2)輸出編碼防止XSS攻擊,使用HttpUtility.HtmlEncode方法。 3)異常處理避免信息洩露,記錄錯誤但不返回詳細信息給用戶。 4)使用ASP.NETIdentity和Claims-based授權保護應用免受未授權訪問。

C 語言中冒號 (':') 的含義:條件語句:分隔條件表達式和語句塊循環語句:分隔初始化、條件和增量表達式宏定義:分隔宏名和宏值單行註釋:表示從冒號到行尾的內容為註釋數組維數:指定數組的維數


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具