本文转自清泛网:http://www.tsingfun.com/html/2015/dev_0727/466.html
特性1:async和await
*async和await是一对标记符,可以用来标记当一个任务(线程)完成后将返回到哪里
*这里有三点需要注意的地方:
1、async和await是成对出现的,独立是无法使用的
2、async是标记方法的,这个标记只是指示出该方法中将包含await关键字
3、await关键字标记了任务执行结束后需要返回到的位置,所以常常会将该关键字与Task类联用
特性2:Zip压缩
*Zip格式是现在接受程度最高之一的压缩档案格式。几乎所有操作系统都支持操作该格式。
*在以前的.Net版本中都没有内建对Zip压缩功能的支持,所以通常情况开发人员都会使用第三方的类似于DotnetZip之类的组件来达到该效果。
*在.Net4.5中,Zip压缩格式已经被内置到框架中去了,在 System.IO.Compression命名空间中。
*要使用它,我们就先引用一下两个命名空间:
System.IO.Compression.FileSystem
System.IO.Comptession
using System.IO.Compression;
压缩方法: CreateFromDirectory解压方法: ExtractToDirectory
特性3:正则表达式执行超时
*正则表达式是做字符串类验证的最好方式,但是标准的正则表达式逻辑却会给黑客们留下DoS(拒绝服务)攻击的可能性。
*为什么可以利用正则表达式进行Dos攻击:
*假如我们有个正则表达式^(\d+)$,这个正则表达式希望这个字符串里只包含数字。
*如果我们要验证字符串123456X,会分别验证1、12、123、1234、12345、123456、123456X…
*但是如果我们多加一个数字进去,将会变成7条路径。换句话说,随着字符串长度的增长,正则表达式将会花掉更多的时间来计算,再换句话说,计算时间和字符串长度是成线型比例的。
*这种超长的计算时间很有可能会被黑客发现来做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:配置(Profile)优化(提高启动性能)
*.Net的程序在运行时,由JIT(Just-in-Time)编译器即时的将IL代码转译成机器代码。因此我们常常都会抱怨.Net程序的启动速度缓慢,我们总是需要等待JIT将IL代码转换成机器代码。
*在.Net4.5中,我们有一个称之为配置优化(Profile Optimization)的机制。配置其实仅仅是一个含有程序启动时所需方法列表的简单文件,所以当程序启动的时候,后台JIT(Backgroud JIT)运行并转译这些方法至机器代码。
特性5:垃圾回收(GC)(后台GC垃圾清理)
*对于.Net程序来说,垃圾回收(GC)的确是一件非常繁重和频繁(heavy)的任务。尤其是在ASP.NET程序中,大量的请求使得服务器建立了大量的对象,使得GC必须努力的工作以便把这些不需要的对象清理掉。
*在.Net4.0中,当GC执行清理的时候,所有的程序线程均被暂停了。
*在某个时间点后台GC执行清理,当它们执行清理的时候,所有其他程序线程均会被暂停。这样就使得程序在那个时候会短暂的失去响应。
*为了克服以上这个问题,服务器GC(Server GC)因此而生,在服务器GC中,将会多一个线程运行在后台,用来在后台清理Gen 2的对象使得主GC线程的负载减小,由于两个GC线程在运行,这样使得主应用线程变得更短的暂停,因此而提高了应用程序的吞吐率(throughput)。要启用服务器GC,只需要添加gcServerXML标签并将其设为true即可:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
其他特性
*控制台支持Unicode
*数组支持超过2G大小
*等等……