.NET Framework 4.5 的五大特性
介绍从.NET4.5发布到现在已经有一年多了。但问题是针对最近微软发布的版本信息中,大部分的.NET开发人员所讨论交流的只是其中的一两个特性。其他的特性仅仅停留在MSDN中或者沦为简介文档。 注意:这篇文章仅涉及核心特性,ASP.NET,WCF,WPF,WWF等等不在讨论范围之内。 特性1:异步和等待(代码标记)这个特性已经快被讨论滥了,而且几乎每一个.NET技术狂人都会谈论此特性。但是此特性依旧是我的最爱。稍后您将明白为什么我会以这些话作为开场白。 异步(async)和等待(await?)是用来标记代码在一个任务(线程)完成后,需要继续执行代码的所在位置的标记量。
现在,在上述情况下,若我们想要以另一种方式实现第三步的操作。那么异步和等待这两个关键字可以帮助我们。 现在,关于异步和等待有三点需要重点注意:
下面是前面应用了异步(async)和等待(await)的代码一个修改后的版本。所有步骤都保留不变,除了第三步是完成第二步之后才执行。?简而言之,就是程序完成任务(线程)的操作后,回到Method()方法,继续执行。 现在你读完了“异步”和“等待”的讨论。让我们一起讨论一个问题:上述代码的行为,也可以用Task.Wait或者?Task.ContinueWith?来实现。那么它们有什么区别?我把这个问题留作家庭作业,请自行完成。?? 特性2:Zip?附属功能(Zip压缩)Zip是一个被广泛接受的档案文件格式之一。Zip压缩格式以***.Zip固定格式为大多数的操作系统所支持。
现在,在.NET中我们还没有嵌入对Zip解压程序的支持。很多开发人员第三方组件如:DotnetZip。在.NET4.5当中Zip特性已经融入了framework当中,且命名空间为:System.IO.Compression. 第一步,你需要参考两个命名空间:
下一步是:引入下面两个命名空间: </td> </td> </tr></table> 如果你想要将一个文件压缩为Zip格式文件,你可以用如下所示的CreateFromDirectory方法。? </td> </td> </tr></table> 特性3:正则表达式超时“Regex”
在数据验证方面最受欢迎。考虑到您可能对“Regex”完全陌生的。请参考我介绍Regex如何运作的视频。
But?because?of?the?typical?parsing?logic?of?regex?it?is?exposed?to?DOS?attacks.?Let?us?try?to?understand?in?detail?what?I?mean?by?that.
但是由于正则表达式典型的逻辑解析是暴露在DOS攻击之下的。让我们尝试了解一下细节来明白我为什么这么说。 但是如果我们再扩展一位输入参数,它将有七条路径。也就是说,随着输入参数长度的增加,正则表达式的验证需要更多地时间来验证。即:验证所需时间和输入参数的长度为线型关系。 现在让我们把前面的表达式“^(d+)$”复杂化为“^(d+)+$”。如果你意识到了这个正则表达式写的非常复杂。而且我们想验证“123456x”。它将执行32条路径。?如果你再添加一个字符,它遍历的路径将变成64条。 也就是说,对上述正则表达式而言,验证输入参数的长度与消耗时间是指数关系。 现在,你可能会问:这些有关系吗?但是我要说的是:当正则表达式执行线性相关的验证时,这个特点可能被黑客利用,以实现DOS攻击。他们可以输入非常长的字符串,使你的应用永远处于挂起状态(始终处于正则验证状态)。 </td> <div class="line number2 index1 alt1"><code class="c# plain">{ <div class="line number3 index2 alt2"> <code class="c# spaces">??<code class="c# plain">var regEx = <code class="c# keyword">new <code class="c# plain">Regex(@”^(d+)+$”,RegexOptions.Singleline,TimeSpan.FromSeconds(2));
</td> </tr></table> ? 特性4:配置文件的优化(提升启动时性能)众所周知,.NET代码处于半编译格式。在运行时,JIT编译器才会运行和解释半编译的IL代码为本机的机器码。由于第一次运行.NET程序的时候JIT忙于把IL编码解释为机器代码,因此程序运行的会非常慢。这也是JIT被很多.NET程序员诟病的一个问题。 为 了创建“配置文件”这个文件,你首先需要引入System.Runtime这个命名空间。第二步,你要调用静态类 ProfileOptimization?中的SetProfileRoot和StartProfile?方法。现在,当程序启动后台JIT时,它将通过 后台读取配置文件并编译启动方法来缩短启动时间。 </td> ?
?
</td> </tr></table> 注意:ASP.NET?4.5和Silverlight的应用程序默认采用Profileoptimization??静态类进行处理。因此上述代码不必再此类项目中再写一遍。? 特性5:垃圾回收器(GC后台清理)垃圾回收器在一个.NET程序中是一项非常繁重的任务。并且,在ASP.NET应用程序中表现更为明显。ASP.NET的应用程序在服务器端运行,而且许多客户端会向服务器发送请求来创建对象。这使得GC清理非必要对象的工作更加繁重。 在.NET4.0
中,当GC清理垃圾时,所有应用程序的线程是被中止的。你可以在上图中看到,我们有三个应用程序的线程正在运行,我们有两个GC分别运行在不同的线程。一
个GC线程对应一个本地进程。现在,应用程序的线程正在正常执行。现在,随着这些程序的线程执行它们任务的过程中,它们也创建了托管对象。 为 了解决以上问题,服务器端的GC应运而生。服务器GC会多开启一个后台运行的线程。这个线程将在后台运行,并且持续清理二代对象。因此,减少了主GC线程 的负载。由于GC采用双线程运行,主程序的线程被中止的频率将大大境地。从而提高了应用程序的运行效率。为了使用服务器GC,我们需要在配置文件中将添加 gcServer??XML标签,并使之有效。如下所示 </td>
</td> </tr></table> ? 三个有待探索的特性为程序设置特定区域性的信息?在以往的.NET版本中。如果我需要设置特定区域性的信息。我需要在很多地方重复操作。羡慕的代码就是展示在多个线程级别中设置特定区域性的信息的纠结与痛苦。在多线程应用程序的开发中,更是让人苦不堪言。 </td> </td> </tr></table> 在.NET4.5中。我们可以在应用程序里设置特定区域性的信息的级别。而且所有内部的线程将继承此信息。下面是演示如何使用DefaultThreadCurrentCulture?的代码。 </td> </td> </tr></table> 数组支持超过2G字节的规模我无法想象在什么情况下我们会用到2GB的集合。所以我本人不知道我们在什么地方可以用到该特性。曾经,我需要一个大量数据的集合时,我将把大量数据分解为几部分。但是我相信,.NET中添加此特性是有一定原因的。 控制台程序支持Unicode编码因为很少有人从事控制台程序的开发,所以我没有在上述讨论中提到此特性。我曾看到过人们在教学的时候用到了控制台程序。总而言之,控制台程序也开始支持Unicode编码格式了。 ? 原文路径? http://www.itstrike.cn/Question/10777f22-b683-45ee-a957-c38368823a01.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 二进制数据的序列化反序列化和Json的序列化反序列化的重要区
- asp.net – WebForm_DoPostBackWithOptions没有使用chrome定
- asp.net-mvc – 如何在ASP.Net Identity上获取OWIN上下文?
- WinForms和ASP.NET自定义控件的通用代码
- 如何在asp.net MVC 5中注销用户?
- asp.net-mvc-3 – MVC:路由获取/发布到不同的控制器 怎么样
- asp.net – Reflection构成了什么风险? (中等信任)
- .net – <%#和<%=开启代码有什么区别?
- ASP.NET API接口使用HttpClient进行测试和验证
- ASP.NET MVC3:在客户端的$Ajax请求之后,Request.IsAuthent
- asp.net-mvc – MVC4将复杂对象从View传递到Cont
- asp.net-mvc-2 – 在MVC中实现自定义标识和IPrin
- asp.net-mvc – 如何在ASP.NET MVC中执行辅助操作
- asp.net – 在单个Azure云服务上部署多个Web角色
- asp.net – 如何拦截WCF .svc服务中对方法的所有
- 向asp.net添加样式表(使用Visual Studio 2010)
- asp.net-mvc – MVC – 编辑对象列表
- asp.net – 是否可以将.ASPXAUTH用于我自己的日志
- asp.net-mvc – ViewBag.Title值覆盖ASP.NET MVC
- asp.net-mvc – 如何在ASP.NET MVC RC1中返回304