简介
自.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 enabled="true"/> </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 五个很棒的特征分享的细致内容,更多请关注ki4网别的相干文章!