.Net Framework 各个版本新特性总结 (一)
.Net Framework 4.5 新特性
最近面试时又看到有问.Net Framework 新特性的问题,一时被问到了。平时也是拿起来就用,新版本出来了,新特性也就是瞄一眼,也没去仔细查看。这次干脆花点时间总(翻)结(译)一下各个版本相比上一版本带来的新特性。主要参考来源是MSDN,一下是原文链接:
Reference: https://msdn.microsoft.com/en-us/library/ms171868(v=vs.110).aspx#core
嗯,我们就从4.5开始。
目录 Table Of Content
2. 托管扩展框架
3. 异步文件操作
4. 工具
5. 并行计算
6.网站
7. 网络编程
8.WPF
9.WCF
10. WF
11.可移植类库
1. 核心特性和改进
1) . 在安装Framework 4.5的时候减少了系统重启的需要。应为4.5 安装时需要替换4.0的部分文件,所以要求这些文件在安装时可被替换(可写)。4.5引入了一个重启管理器(Restart Manager),它可以检测到正在运行的4.0的程序,并尝试关闭这些程序(会有提示框让用户确认要关闭的程序),以此来避免重启系统。但是有是一些程序不能或不应该关闭的,那就还是需要重启系统。
如果你要发布自己的程序并自带Framework 安装包(Chained Instaler),也可以通过设置命令行选项的方式,让用户在安装你的程序包是出现.Framework自带的关闭程序提示框。
参考: https://msdn.microsoft.com/en-us/library/hh527997(v=vs.110).aspx
PS: 这个新特性似乎用处不大,在开发环境重不重启系统无关紧要,重启的时候还可以趁机看看头条。生产环境的话,又不是100%不需重启,似乎并没有起到什么大作用。
2). 在64位系统上支持超过2GB的大数组。但是要是有此特性需要在配置文件中设置 gcAllowVeryLargeObjects 配置项:
<configuration> <runtime> <gcAllowVeryLargeObjects enabled="true" /> </runtime> </configuration>
PS:没用过这么大的数组,什么场景会用到这么大的数组呢?
3). 开始支持服务器的后台垃圾回收。从4.0开始有后台垃圾回收,但是只支持工作台(WorkStation)环境。4.5开始支持服务器。 垃圾回收会自我调节一适应不同的场景。我们可以根据工作量的特点。通过修改配置文件的设置来设定垃圾回收的类型。目前CLR提供了两种垃圾回收的类型:工作台和服务器。
工作台垃圾回收适用于各种客户端工作台以及独立PC.它是 配置文件中<runtime>/ <gcserver> 的默认设置。它可以以并发或非并发模式运行。并发模式下垃圾回收和托管主线程同时运行。从4.0开始,后台垃圾回收替代了并发垃圾回收。
服务器垃圾回收适用于高吞吐和扩展的服务器应用程序。服务器垃圾回收可以是非并发或后台。
对于后台垃圾回收,它会在一个单独的线程中执行,而且只在2代堆上执行垃圾回收。
在0和1代(ephemeral generations)的对象是使用前台垃圾回收(Foreground Garbage colletion), 前台垃圾回收启动时,后台垃圾回收线程和程序主线程都会挂起直到回收结束再恢复。
Reference: https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx#background_garbage_collection
4).在多核处理器系统上,可以支持后台JIT 编译,以提升程序启动速度。
Reference: https://msdn.microsoft.com/en-us/library/system.runtime.profileoptimization(v=vs.110).aspx
5).可以设置正则表达式引擎的超时时间。以前版本中是没有超时时间的。这个时间可以单独在创建是设置在Regex对象上或设置在AppDomain 中应用于所有的Regex对象。默认值是Regex.InfiniteMatchTimeout, 无超时。
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { AppDomain domain = AppDomain.CurrentDomain; // Set a timeout interval of 2 seconds. domain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(2)); Object timeout = domain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT"); Console.WriteLine("Default regex match timeout: {0}", timeout == null ? "<null>" : timeout); Regex rgx = new Regex("[aeiouy]"); Console.WriteLine("Regular expression pattern: {0}", rgx.ToString()); Console.WriteLine("Timeout interval for this regex: {0} seconds", rgx.MatchTimeout.TotalSeconds); } } // The example displays the following output: // Default regex match timeout: 00:00:02 // Regular expression pattern: [aeiouy] // Timeout interval for this regex: 2 seconds
Reference:https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.matchtimeout(v=vs.110).aspx
6).可以为AppDomain 设置默认Culture.
Reference: https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.110).aspx
7).控制台Console 支持UTF-16 编码。
8).在字符串的排序和比较是支持不同文化版本的编码.
9).读取资源时有更好的性能。
10).改进Zip压缩,减少了压缩后文件的大小。
11).可自定义一个反射上下文,覆盖默认的反射行为。反射上下文的作用就是在提供一种在运行时修改被反射类型的成员或方法的属性(Attribute).比如加一个源代码中没有属性,或者去掉一个源代码中有的属性。这样利用反射获取类型成员或方法的属性时就获取的是自定义的属性。
Reference:https://msdn.microsoft.com/en-us/library/system.reflection.context.customreflectioncontext(v=vs.110).aspx
12).当类System.Globalization.IdnMapping 在Win8上使用是,支持2008版本的IDNA(Internationalized Domain Names in Applications).类System.Globalization.IdnMapping 是支持非ASCII编码的因特网域名。
Reference: https://msdn.microsoft.com/en-us/library/system.globalization.idnmapping(v=vs.110).aspx
13).当.Net Framework 运行在Win8上时,字符串的比较会代理给实现了Unicode 6.0的操作系统。如果在其他平台上运行,.Net Framework 使用它自己的字符串比较,是基于Unicode5.X 。
14).可基于应用程序域计算字符串的哈希码。
15).类型反射支持Type 和 TypeInfo 类之间的拆分。