一、应用程序兼容性和部署
除了一些在安全、标准遵从、正确性、可靠性及性能等方面的改进之外,.NET4与基于早期.NET版本构建的应用程序高度兼容。
.NET4并不会自动使用当前版本的公共语言运行库来运行使用早期版本的.NET构建的应用程序。为了在.NET4下运行以前的应用程序,你必须使用在您的Visual Studio项目的属性中指定的目标.NET版本重新编译您的应用程序,或者在应用程序的配置文件中使用元素来指定支持的运行时刻库。
二、内核新功能及改进
(一)诊断和性能
早期版本的.NET并没有提供一种方法来确定一个特定的应用程序域是否正在影响其他应用程序域,因为操作系统的API及相关工具(如Windows任务管理器)都被精确设计到进程级。从.NET4开始,你可以在每一个应用程序域中获取处理器及内存的使用估测信息。
您可以监控每一个应用程序域的CPU和内存使用情况。可以通过托管和本机宿主API以及Windows事件跟踪(ETW)来进行应用程序域资源的监控。当启用此功能后,它能够在进程的整个生命周期过程中收集所有应用程序域的统计信息。有关此主题,你也可以参考新属性AppDomain.MonitoringIsEnabled的介绍。
现在,您可以为了诊断目的而访问ETW事件以提高性能。
(二)垃圾收集
.NET4支持后台垃圾收集。此功能取代了以前版本中的并行垃圾收集,从而提供更好的系统性能。
(三)代码契约
代码契约功能允许你指定那些仅通过方法或类型的签名尚不能描述的契约信息。新命名空间System.Diagnostics.Contracts中包含的类提供了一种独立于语言的方法并使用前置条件、后置条件和对象不变量等形式来表达编码假设。这些契约通过运行时检查能够改进测试,支持静态契约校验,并支持文档生成。
(四)仅使用设计时互操作程序集
如今,你不再需要携带主互操作程序集(PIA)来部署与COM对象互操作的应用程序。在.NET4中,编译器可以从互操作程序集中嵌入类型信息,而且能够仅选择那些应用程序(例如,一个插件)实际使用的类型。类型安全由公共语言运行时来保障。
(五)动态语言运行时
动态语言运行时(DLR)是一个新的运行时环境,它把一组针对动态语言的服务添加到CLR中。DLR使开发运行于.NET上的动态语言更加容易,而且有利于把动态特性添加到静态类型的语言中。为了支持DLR,.NET中添加了一个新的命名空间System.Dynamic。
通过引入新的描述控制流的类型,例如System.Linq.Expressions.LoopExpression和System.Linq.Expressions.TryExpression,表达式树功能被进一步扩展。注意,这些新的类型仅为动态语言运行时(DLR)所使用,而不能够由LINQ使用。
下面示例:C#调用python代码
static void Main(string[] args)
{
Action action = () => Console.WriteLine("Hello World");
ScriptRuntime runtime = Python.CreateRuntime();
dynamic script = runtime.UseFile("script.py");
dynamic decorator = script.decorator(action);
decorator.execute();
}
}
}
在创建的工程的bin\debug目录下,添加script.py.代码如下,一个很简单的wrapper,仅供验证之用。
def wrapper(function):
def inner(self):
print "Decorator... "
return function(self)
return inner
class decorator(object):
def __init__(self, function):
self.action = function
@wrapper
def execute(self):
self.action()
(六)协变与反变
有几种泛型接口和委托现在支持协变与反变功能。
(七)BigInteger和复数
新的System.Numerics.BigInteger结构是一个任意精度的整数数据类型,它支持所有标准的整数运算,其中包括位操作。BigInteger可以用于任何.NET语言中。此外,一些新的.NET语言(如F#和IronPython)都已内置了对此结构的支持。
新的System.Numerics.Complex结构用于描述一个复数,而且支持复数的算术运算和三角运算。
(八)元组
.NET4引入了System.Tuple类,用于创建包含结构化数据的元组对象。另外,还提供了泛型元组类以便支持具有1至8个组件的元组。为了支持有9个或更多组件的元组对象,提供了一个泛型元组类,此类使用7个类型参数,而第8个参数可以是任何的元组类型。
(九)文件系统枚举功能方面的改进
.NET4又增加了新的文件枚举方法,从而进一步提高访问巨型文件目录或遍历大文件的应用程序的性能。
(十)内存映射文件
.NET现在支持内存映射文件。你可以使用内存映射文件来编辑非常大的文件,还可以为进程间通信创建共享内存。
(十一)64位操作系统与进程
您可以使用Environment.Is64BitOperatingSystem和Environment.Is64BitProcess属性来标识64位的操作系统和进程。
当你打开基键时,您可以使用Microsoft.Win32.RegistryView枚举来指定一个32位或64位的注册表视图。
三、托管扩展框架
托管扩展性框架(MEF)是.NET4中的一个新库,帮助您构建可扩展的和可组合式应用程序。MEF可以让您指定在一个应用程序中的扩展点,给其他扩展的应用程序提供服务,以及创建可扩展应用程序所使用的部件等。MEF还支持很容易地基于元数据搜索到可用的部件,而无需为这些部件加载相应的程序集。
四、并行计算
.NET 4针对编写多线程和异步代码引入了一个新的编程模式,从而极大地简化了应用程序和库开发者的编程。此新的模式可以使开发人员以一种自然的方式来编写高效的,良好粒度的,可扩展的并行代码,而不必直接使用线程或线程池等。新的System.Threading.Tasks命名空间和其他相关类型支持这种新模式。并行LINQ(PLINQ),作为LINQ to Objects的一种并行实现,能够通过声明性语法支持类似的功能。
代码示例:
//并行化的Linq,只需杂集合类型后加上.AsParallel()
var q = from p in people.AsParallel()
where p.Name == queryInfo.Name &&
p.State == queryInfo.State &&
p.Year >= yearStart &&
p.Year <= yearEnd
orderby p.Year ascending
select p;
//并行化的for
Parallel.For(0, 16, i =>
{
Console.WriteLine("TID={0}, i={1}",
Thread.CurrentThread.ManagedThreadId,
i);
});
五、网络编程
网络编程方面的改进包括以下内容:
针对Windows身份验证的安全改进体现在几个类中,包括System.Net.HttpWebRequest,System.Net.HttpListener,System.Net.Mail.SmtpClient,System.Net.Security.SslStream和 System.Net.Security.NegotiateStream。在Windows 7和Windows Server 2008 R2中运行的应用程序可以使用扩展保护功能。
六、Web开发
ASP.NET版本4在以下几个方面引入了一些新特点:
核心服务,包括一个新的允许您扩展缓存的API,支持压缩会话状态数据和一个新的应用程序预加载管理器(自动启动功能)。
Web窗体方面,其中包括为ASP.NET路由提供的更加集成化的支持,对Web标准的增强支持,更新的浏览器支持,为数据控件增加了一些新功能,以及为视图状态管理增加了一些新的功能。
Web窗体控件方面,提供了一个新的图表控件。
MVC框架方面,包括针对视图的新的辅助方法,对分区的MVC应用程序的支持,并提供了异步控制器。
动态数据方面,包括针对现有Web应用程序的支持,全对多对多关系和继承的支持,对字段模板和属性的支持,以及增强的数据过滤功能。
在Microsoft AJAX库中增加了针对客户端中心型Ajax应用程序的额外支持。
Visual Web Developer中,包括了改进的针对JScript的智能感知支持,针对HTML和ASP.NET标记的新的自动完整代码片段支持,以及增强的CSS兼容性支持。
部署方面,为自动化的典型的部署任务增加了新的支持工具。
多目标方面,包括针对无法在.NET的目标版本中可用功能的更好的过滤支持。
七、客户端开发
Windows Presentation Foundation
在.NET4中,Windows Presentation Foundation(WPF)在许多方面都发生了变化并进行了改进,包括控件、图形和XAML等等。
八、数据
(一)ADO.NET
ADO.NET的实体框架中提供了新功能,包括持久化透明对象(Persistence-Ignorant Objects,译者注:这种对象具有不必事先在DBMS中建立实体信息就可以利用实体框架的DDL生成功能将POCO对象结构转换成实体信息结构以存入信息库中的能力。),在LINQ查询功能和自定义对象层代码生成等。有关该内容的更多的信息,请参阅《ADO.NET新特征》。
(二)动态数据
对于ASP.NET 4来说,动态数据支持得到进一步增强,从而给你以更强大的功能快速建立数据驱动的网站。这包括以下内容:
基于在数据模型定义的约束的自动验证功能。
通过使用已成为动态数据项目的一部分的字段模板,能够方便地改变在GridView和DetailsView控件中针对相应字段生成的标记。
九、通信和工作流
Windows通信基础(WCF)实现了消息管理方面的增强并提供与Windows工作流基础(WF)的无缝集成。WF提供的改进体现在性能、可扩展性、工作流建模以及一个更新的可视化设计器等方面。