C#的变迁史10 - C# 5.0 之其他增强篇
1. 內置zip壓縮與解壓
Zip是最為常用的文件壓縮格式之一,也被幾乎所有操作系統支持。在之前,使用程序去進行zip壓縮和解壓要靠第三方組件去支持,這一點在.NET4.5中已有所改觀,Zip壓縮和解壓功能已經內置于框架本身。這個功能使用起來很簡單,三步即可:
第一步:在當前工程中添加兩個Reference:
System.IO.Compression.FileSystem System.IO.Compression第二步:引用命名空間:
using System.IO.Compression;第三步:使用ZipFile提供的靜態方法完成壓縮和解壓:
// 如果你想要從文件夾壓縮文件你可以調用如下所示的CreateFromDirectory函數。 ZipFile.CreateFromDirectory(@"D:\data",@"D:\data.zip"); // 如果你想要解壓,你可以調用如下代碼所示的ExtractToDirectory函數。 ZipFile.ExtractToDirectory(@"D:\data.zip", @"D:\data\unzip");2. 正則表達式匹配可設置超時
之前的正則表達式匹配是沒有時間限制的,這樣對網站來說就可能存在漏洞。假設一個黑客要攻擊一個含有正則表達式驗證的網站(幾乎每個網站應該都使用了)的時候,他可以設置一個超長的字符串去讓服務器匹配,這樣就可以永遠的讓服務器無法響應別的請求,這就是通常所說的DOS(拒絕服務)攻擊。在.NET 4.5中,我們可以給正則表達式設置超時時間,使用起來很簡單:
try { var regEx = new Regex(@”^(\d+)+$”, RegexOptions.Singleline, TimeSpan.FromSeconds(2)); var match = regEx.Match(“123453109839109283090492309480329489812093809x”); } catch (RegexMatchTimeoutException ex) { Console.WriteLine(“Regex Timeout”); }3. 可以設置app domain的culture info
在之前版本中,如果想設置culture info,是需要在每個線程中設置的。下面的示例程序演示了在線程級別設置culture info的痛苦,特別是當我們有大量多線程的時候:
在.NET 4.5中我們可以在應用程序域級別設置culture info,并且所有在這個應用程序域當中的線程都會繼承這個culture info。看一個簡單的例子:
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); CultureInfo.DefaultThreadCurrentCulture = culture;4. 后臺垃圾回收
垃圾回收在.NET應用中是一項繁重的任務,特別是在ASP.NET應用中,它更加繁重。ASP.NET應用在服務器端運行,當許多客戶端向服務器發送請求時就會產生大量的零時對象,這使得垃圾回收需要不斷的啟用回收功能。
在之前的版本中,當垃圾回收運行清理的時候,所有的應用程序線程要暫停等待垃圾回收結束,因為回收垃圾以后,相關的引用類型對象會有新的地址信息。這對于服務器來說,就是此時服務器不響應客戶端的請求。
為了克服上述問題,服務器垃圾回收機制被加入到.NET 4.5中。在服務器垃圾回收機制中,CLR多創建了一個運行在后臺的線程。這個線程在后臺運行并持續清理2代對象,從而降低主垃圾回收線程的開銷。由于雙垃圾回收線程的執行,主應用程序線程很少被暫停,進而增加了應用程序吞吐量。使用服務器垃圾回收也很簡單,就是在config文件中配置一下:
<configuration> <runtime> <gcServer enabled="true"/> </runtime> </configuration>5. 多核處理器下程序啟動性能改善
我們都知道.NET代碼編譯后是以IL代碼的形式存在。在程序首次運行時,JIT(Just-in-Time)編譯器才會將IL代碼編譯為機器碼。對JIT最大的抱怨之一就是當.NET程序首次運行的時候,它運行得比較慢。
為了降低這個啟動時間,微軟在.NET4.5中加入了“優化配置文件”特性。配置文件是一個記錄了程序在啟動運行中需要的方法列表的簡單文件。當程序開始運行后,后臺的JIT執行并且開始轉換這些方法的IL代碼為機器碼。
這個后臺JIT在多個處理器上可以并行的編譯啟動方法所以可以降低啟動時間。請注意,因為這里是并行執行的,所以是利用了多核處理器來實現優化的。如果你的機器沒有多核處理器(這種機器應該不存在了),那么這個設定會被忽略。
為了創建“配置文件”這個文件,首先你需要引入System.Runtime命名空間。然后你可以調用靜態類ProfileOptimization的SetProfileRoot和StartProfile方法。現在當應用啟動后臺JIT,它將會讀取配置文件并且在后臺編譯啟動方法從而降低啟動時間。
using System.Runtime; ProfileOptimization.SetProfileRoot(@"D:\ProfileFile"); ProfileOptimization.StartProfile("ProfileFile");需要注意:ASP.NET 4.5和Silverlight 5應用默認支持了Profileoptimization。所以編寫這兩種程序無需編寫任何Code。
6. 應用程序級別的增強
這個是一個比較大的課題,包括ASP.NET程序中HTML5技術的支持,WPF,WCF,WF類庫的增強,這個就不多說了。需要的同學參見MSDN上的詳細列表:http://msdn.microsoft.com/zh-cn/library/ms171868(v=vs.110).aspx。
總結
以上是生活随笔為你收集整理的C#的变迁史10 - C# 5.0 之其他增强篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十节:基于MVC5+Unity+EF+
- 下一篇: 华为Mate 40 Pro回来了!官方商