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 之其他增强篇的更多相关文章

  1. C#的变迁史 - C# 4.0 之线程安全集合篇

    作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了. 而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们, ...

  2. C#的变迁史 - C# 5.0 之调用信息增强篇

    Caller Information CallerInformation是一个简单的新特性,包括三个新引入的Attribute,使用它们可以用来获取方法调用者的信息, 这三个Attribute在Sys ...

  3. C#的变迁史 - C# 5.0 之并行编程总结篇

    C# 5.0 搭载于.NET 4.5和VS2012之上. 同步操作既简单又方便,我们平时都用它.但是对于某些情况,使用同步代码会严重影响程序的可响应性,通常来说就是影响程序性能.这些情况下,我们通常是 ...

  4. C#的变迁史 - C# 4.0 之并行处理篇

    前面看完了Task对象,这里再看一下另一个息息相关的对象Parallel. Parallel对象 Parallel对象封装了能够利用多核并行执行的多线程操作,其内部使用Task来分装多线程的任务并试图 ...

  5. C#的变迁史 - C# 4.0篇

    C# 4.0 (.NET 4.0, VS2010) 第四代C#借鉴了动态语言的特性,搞出了动态语言运行时,真的是全面向“高大上”靠齐啊. 1. DLR动态语言运行时 C#作为静态语言,它需要编译以后运 ...

  6. C#的变迁史 - C# 4.0 之多线程篇

    在.NET 4.0中,并行计算与多线程得到了一定程度的加强,这主要体现在并行对象Parallel,多线程Task,与PLinq.这里对这些相关的特性一起总结一下. 使用Thread方式的线程无疑是比较 ...

  7. C#的变迁史 - C# 3.0篇

    C# 3.0 (.NET 3.5, VS2008) 第三代C#在语法元素基本完备的基础上提供了全新的开发工具和集合数据查询方式,极大的方便了开发. 1. WPF,WCF,WF 这3个工程类型奠定了新一 ...

  8. C#的变迁史 - C# 2.0篇

    在此重申一下,本文仅代表个人观点,如有不妥之处,还请自己辨别. 第一代的值类型装箱与拆箱的效率极其低下,特别是在集合中的表现,所以第二代C#重点解决了装箱的问题,加入了泛型.1. 泛型 - 珍惜生命, ...

  9. C#的变迁史 - C# 1.0篇

    C#与.NET平台诞生已有10数年了,在每次重大的版本升级中,微软都为这门年轻的语言添加了许多实用的特性,下面我们就来看看每个版本都有些什么.老实说,分清这些并没什么太大的实际意义,但是很多老资格的. ...

随机推荐

  1. OpenSSL密码算法库: MD5示例小程序

    OpenSSL http://www.openssl.org/ OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL 的密码算法库包含多种加密算 ...

  2. QT屏蔽qDebug的方法

    在工程文件.pro里面添加 DEFINES += QT_NO_WARNING_OUTPUT\                   QT_NO_DEBUG_OUTPUT 然后rebuild all.这样 ...

  3. cxf restful

    Restful 服务端 1 创建好pojo.dao.service, dao进行数据库操作,service提供服务 @Path("/roomservice") @Produces( ...

  4. salesforce 零基础学习(三十七) DML及Database方法简单描述

    在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法. 使用DML语句和使用Database类的方法对于我们来说用的都很多,并且都很常见.对于数据库常见的操作:增 ...

  5. Jenkins的插件管理(安装和更新插件)

    使用Jenkins的编译部署项目需要依赖各种插件 下面安装Jenkins的各种插件: 1.登录Jenkins进入以下界面: 2.点击 系统管理 : 3.点击 管理插件 : 4.点击 可选插件 选择你需 ...

  6. C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)

    一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: .string name = value; if (name ...

  7. 每天一个linux命令(37):date命令

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  8. SpringSide 部署showcase项目出现 JAX-RS (REST Web Services) 2.0 can not be installed错误!

    maven+springmvc错误 JAX-RS (REST Web Services) 2.0 can not be installed 项目problem提示错误 JAX-RS (REST Web ...

  9. C#多线程之旅(3)——线程池

    v博客前言 先交代下背景,写<C#多线程之旅>这个系列文章主要是因为以下几个原因:1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的,如果没有用好,容易造成很 ...

  10. uva 10801 - Lift Hopping(最短路Dijkstra)

    /* 题目大意: 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 问从第0层楼到第k层最少经过多长时间到达! 思路:明显的Dijkstra , ...