[续前].NET Framework 3.5 版中的新增功能(2)[整理]
.NET Framework 3.5 版中的新增功能体现在以下诸多方面:
- .NET Compact Framework
- ASP.NET
- 外接程序和扩展性(AddIn)
- 公共语言运行库
- 密码系统(Cryptography)
- 网络
- WPF(Windows Presentation Foundation)
- WCF(Windows Communication Foundation)
- WF (Windows Workflow Foundation)
- Windows窗体(Windows Forms)
- LINQ
- 表达式目录树(Expression Trees)
- C#,C++.net, VB.net等编程语言的丰富和完善
外接程序和扩展性(AddIn)
.NET Framework 3.5 中的 System.AddIn.dll 程序集向可扩展应用程序的开发人员提供了强大而灵活的支持。它引入了新的结构和模型,可帮助开发人员完成向应用程序添加扩展性的初始工作,并确保开发人员的扩展在宿主应用程序发生更改时仍可继续工作。该模型提供了以下功能:
- 发现
使用 AddInStore 类可以很容易地在计算机上的多个位置中查找和管理外接程序集。可以使用此类来按照外接程序的基类型搜索和获取有关它们的信息,而不必加载它们。
- 激活
使用 AddInToken 类可以轻松地激活应用程序选中的外接程序。只需选择隔离和沙盒级别,系统就会完成剩余的工作。
- 隔离
提供了对应用程序域和外接程序的进程隔离的内置支持。每个外接程序的隔离级别由宿主控制。系统将处理应用程序域和进程的加载,并在这些域和进程的外接程序停止运行后关闭它们。
- 沙盒
可以轻松地将外接程序配置为具有默认信任级别或自定义信任级别。提供的支持包括 Internet、Intranet、完全信任和“与宿主相同”权限集,以及让宿主指定自定义权限集的重载。
- UI 构成
外接程序模型支持直接构成跨应用程序域边界的 Windows Presentation Foundation (WPF) 控件。可以轻松地允许外接程序直接构成宿主的 UI,同时保留隔离、卸载能力、沙盒和版本控制的好处。
- 版本控制
外接程序结构使宿主可以引入新版本的宿主对象模型,而不中断现有外接程序或不影响开发人员对新版本的体验。
公共语言运行库(Common Language Runtime)
- HashSet 集合
HashSet<(Of <(T>)>) 提供对 .NET Framework 的高性能集合运算。集合是一组不重复出现且无特定顺序的元素。有关更多信息,请参见 HashSet 集合类型。
- 诊断 (EventSchemaTraceListener 类)
EventSchemaTraceListener 类提供端到端、符合架构的事件的跟踪。可以对包含跨线程、AppDomain、进程和计算机边界的异类组件的系统使用端到端跟踪。已定义一个标准化事件架构来启用跨这些边界的跟踪。此架构由多种跟踪技术共享,其中包括类似事件查看器这样的 Windows Vista 诊断工具。该架构还可支持添加符合架构的自定义元素。
EventSchemaTraceListener 类已针对日志记录性能进行了调整,现在隐式支持无锁定的跟踪。
- I/O 和管道
管道提供在同一台计算机上或网络中任意其他 Windows 计算机上运行的任何进程之间的进程间通信。.NET Framework 提供对两种类型的管道的访问:匿名管道和命名管道。
- 垃圾回收(GCSettings 类和GC 类)
GCSettings 类具有一个新的 LatencyMode 属性,可用来调整垃圾回收器侵入应用程序的时间。可以将此属性设置为新的 [System.Runtime.GCLatencyMode] 枚举值之一。
GC 类具有一个新的 Collect(Int32, GCCollectionMode) 方法重载,可用来调整强制垃圾回收的行为。例如,可以使用此重载来指定垃圾回收器应确定当前时间是否为回收对象的最佳时间。此重载采用新的 GCCollectionMode 枚举中的值。
- 部分信任环境中的反射和反射发出(DynamicMethod)
现在,在部分信任下运行的程序集可以发出并执行代码。已发出的只调用公共类型和方法的代码不需要超出所访问的类型和方法要求的权限。使用新的 DynamicMethod(String, Type, array<Type>[]()[]) 构造函数可以很容易地发出类似的代码。
当发出的代码需要访问私有数据时,新的 DynamicMethod(String, Type, array<Type>[]()[], Boolean) 构造函数将允许进行受限制的访问。宿主必须授予 ReflectionPermission 新的 RestrictedMemberAccess 标志以启用此功能,这使发出的代码能够访问私有数据,但仅对具有等于或小于信任级别的程序集中的类型和方法适用。
对于反射,授予 RestrictedMemberAccess 的宿主同样允许受限制地使用用来访问私有属性、调用私有方法等的方法,但仅对具有等于或小于信任级别的程序集适用。
- 线程处理
更好的读取器/编写器锁(ReaderWriterLockSlim)
新的 ReaderWriterLockSlim 类提供明显优于 ReaderWriterLock 的性能,可与 lock 语句相当(在 Visual Basic 中为 SyncLock)。锁定状态之间的转换已得到简化,从而使编程更容易并减少发生死锁的几率。新类支持递归,可简化从 lock 和 ReaderWriterLock 的迁移。
ThreadPool 性能增强
显著提高了在托管线程池中调度工作项和 I/O 任务的吞吐量。现在,调度可在托管代码中进行处理,而无需转换到非托管代码,并且具有较少的锁。建议对特定于应用程序的线程池实现使用 ThreadPool。
- 时区改进(DateTimeOffset 和 TimeZoneInfo)
两种新的类型 DateTimeOffset 和 TimeZoneInfo 改进了对时区的支持,可以更容易地开发使用不同时区中的日期和时间的应用程序。
TimeZoneInfo
新的 TimeZoneInfo 类在很大程度上取代了现有的 TimeZone 类。可以使用 TimeZoneInfo 来检索注册表中定义的任何时区,而不仅仅是本地时区和协调世界时 (UTC)。还可以使用此类来定义自定义时区、序列化和反序列化自定义时区数据以及在时区之间转换时间。
DateTimeOffset
新的 DateTimeOffset 结构对 DateTime 结构进行了扩展,可以更容易地使用跨时区的时间。DateTimeOffset 结构将时间和日期信息存储为一个 UTC 日期和时间以及一个指示该时间与 UTC 之差的偏移量值。