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. [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比

    前言 尽管每辆汽车都有后视镜,但不可避免地都存在一个后视镜的盲区,倒车雷达则可一定程度帮助驾驶员扫除视野死角和视线模糊的缺陷,提高驾驶安全性.上一节已经分析清倒车雷达的语音模块(上一节),本节将深入分 ...

  2. 在ThoughtWorks工作这几年我学到了什么?

    不知不觉,从2012年5月1日加入ThoughtWorks到现在,已经3年有余了.时间过得很快,这三年多我干了很多事情,但仔细想想也没有什么特别值得一提的.在一个公司呆久了总觉得很多事情是理所当然的, ...

  3. java 锁3

    先谈线程的状态: 具体来说有, NEW. Running. Blocked.此状态的线程阻塞,它正在等待监视器锁——等待另外一个线程释放锁(通俗说就是等它执行完synchronized了的方法/代码块 ...

  4. 大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出

    回到目录 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面 ...

  5. Java程序员的日常 —— 响应式导航Demo

    这两天想要做响应式的页面,于是本着重复造轮子的想法,模仿Bootstrap官网,精简了一个响应式导航的Demo. 效果 代码 <!DOCTYPE html> <html> &l ...

  6. Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic

    Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic 1.1. ThreadLocal 设计模式1 1.2. ...

  7. Atitit html5 Canvas 如何自适应屏幕大小

    Atitit  html5 Canvas 如何自适应屏幕大小     可以用JS监控屏幕大小,然后调整Canvas的大小.在代码中加入JS 1 2 3 4 5 6 7 $(window).resize ...

  8. ftp下载目录下所有文件及文件夹内(递归)

    ftp下载目录下所有文件及文件夹内(递归)   /// <summary> /// ftp文件上传.下载操作类 /// </summary> public class FTPH ...

  9. KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定

    textInput绑定目的 textInput绑定主要用于<input>或者<textarea>元素.他提供了DOM和viewmodel的双向更新.不同于value绑定,tex ...

  10. 小实例窥探dotnet垃圾回收

    今天项目调试时发现VS中有下面这样的现象. 说明,file.ServerLocation是一个完整的物理路径.第三句代码是错误的,保留只是因为它使用了"s"字符串.   个人认为当 ...