C#的变迁史 - 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());
var match = regEx.Match(“123453109839109283090492309480329489812093809x”);
}
catch (RegexMatchTimeoutException ex)
{
Console.WriteLine(“Regex Timeout”);
}
3. 可以设置app domain的culture info
在之前版本中,如果想设置culture info,是需要在每个线程中设置的。下面的示例程序演示了在线程级别设置culture info的痛苦,特别是当我们有大量多线程的时候:
CultureInfo cul = new CultureInfo(strCulture);
Thread.CurrentThread.CurrentCulture = cul;
Thread.CurrentThread.CurrentUICulture = cul;
在.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#的变迁史 - C# 5.0 之其他增强篇的更多相关文章
- C#的变迁史 - C# 4.0 之线程安全集合篇
作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了. 而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们, ...
- C#的变迁史 - C# 5.0 之调用信息增强篇
Caller Information CallerInformation是一个简单的新特性,包括三个新引入的Attribute,使用它们可以用来获取方法调用者的信息, 这三个Attribute在Sys ...
- C#的变迁史 - C# 5.0 之并行编程总结篇
C# 5.0 搭载于.NET 4.5和VS2012之上. 同步操作既简单又方便,我们平时都用它.但是对于某些情况,使用同步代码会严重影响程序的可响应性,通常来说就是影响程序性能.这些情况下,我们通常是 ...
- C#的变迁史 - C# 4.0 之并行处理篇
前面看完了Task对象,这里再看一下另一个息息相关的对象Parallel. Parallel对象 Parallel对象封装了能够利用多核并行执行的多线程操作,其内部使用Task来分装多线程的任务并试图 ...
- C#的变迁史 - C# 4.0篇
C# 4.0 (.NET 4.0, VS2010) 第四代C#借鉴了动态语言的特性,搞出了动态语言运行时,真的是全面向“高大上”靠齐啊. 1. DLR动态语言运行时 C#作为静态语言,它需要编译以后运 ...
- C#的变迁史 - C# 4.0 之多线程篇
在.NET 4.0中,并行计算与多线程得到了一定程度的加强,这主要体现在并行对象Parallel,多线程Task,与PLinq.这里对这些相关的特性一起总结一下. 使用Thread方式的线程无疑是比较 ...
- C#的变迁史 - C# 3.0篇
C# 3.0 (.NET 3.5, VS2008) 第三代C#在语法元素基本完备的基础上提供了全新的开发工具和集合数据查询方式,极大的方便了开发. 1. WPF,WCF,WF 这3个工程类型奠定了新一 ...
- C#的变迁史 - C# 2.0篇
在此重申一下,本文仅代表个人观点,如有不妥之处,还请自己辨别. 第一代的值类型装箱与拆箱的效率极其低下,特别是在集合中的表现,所以第二代C#重点解决了装箱的问题,加入了泛型.1. 泛型 - 珍惜生命, ...
- C#的变迁史 - C# 1.0篇
C#与.NET平台诞生已有10数年了,在每次重大的版本升级中,微软都为这门年轻的语言添加了许多实用的特性,下面我们就来看看每个版本都有些什么.老实说,分清这些并没什么太大的实际意义,但是很多老资格的. ...
随机推荐
- 自制操作系统(七) 加快中断处理,和加入FIFO缓冲区
参考书籍<30天自制操作系统>.<自己动手写操作系统> 2016-05-26.2016-07-09 主要是加快中断处理,和加入FIFO缓冲区. 因为之前是将打印字符的代码放在了 ...
- 我心中的核心组件(可插拔的AOP)~第六回 消息组件~续
回到目录 上一回写消息组件已经是很久之前的事了,这一次准备把消息组件后续的东西说一下,事实上,第一篇文章主要讲的是发消息,而这一讲最要讲的是收消息,简单的说,就是消息到了服务器之后,如何从服务器实时的 ...
- Java的声明和访问介绍
1.类的声明 类本身的声明:对类的声明来说,主要包括类的访问权限声明和非访问修饰符的使用.对于一个普通的Java类(POJO)来说,主要的访问权限修饰符只有两个public和默认权限,内部类可以有pr ...
- iOS----关于第三方的运用(有待补充)
第三方东西涵盖哪些内容? 1)第三方SDK 2)第三方框架 3)第三方功能代码的封装开源分享 4)第三方工具类等等 PS:1. 对于一个在正在深入学习的程序员而言,有时候参考学习或者使用一下第三方的东 ...
- 23.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。 具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址address(String类型), 电话号码telphone(String类型)和电子邮件地址email(String类型); (2)Employee类中的属性有:办公室office(Stri
package banking; public class Person { private String name; public String address; public String tel ...
- 快速入门系列--MVC--07与HTML5移动开发的结合
现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...
- 移动开发框架剖析(一) Hammer专业的手势控制
一直在写jQuery的源码教程,都没时间研究别的框架了.Hammer是我项目御用的一个手势库,早期1.x版本的swipe事件的响应不灵敏的问题而改过源码,2.x就已经更正过来,而且源码的结构也整个翻新 ...
- Create New Commands in Tcl
Create New Commands in Tcl eryar@163.com 摘要Abstract:Tcl/Tk脚本可以很容易实现用户自定义的命令,方便的创建图形化的用户界面GUI,所以Tcl和T ...
- 清空文件下的SVN控制文件
代码如下,复制代码为txt文件,更改后缀为“.bat”,把文件放到,需要删除的文件的顶端文件夹内,点击执行. @echo on color 2f mode con: cols= lines= @REM ...
- [c++] Basic ideas and Style Guide
Get your own compiler: sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get updatesudo ap ...