【C#版本详情回顾】C#4.0主要功能列表
- 诊断和性能
- 从 .NET Framework 4 开始,您可以获得每个应用程序域的处理器使用情况和内存使用情况估计值
- 通过托管承载 API、本机承载 API 以及 Windows 事件跟踪 (ETW),可提供应用程序域资源监控
- 参见新增的 AppDomain.MonitoringIsEnabled 属性
- 垃圾回收
- .NET Framework 4 提供背景垃圾回收替代了以前版本中的并发垃圾回收并提高了性能
- 代码协定
- 代码协定允许您指定方法或类型的签名没有单独表示的协定信息
- 以前置条件、后置条件和对象固定的形式来表示编码假设
- 新的 System.Diagnostics.Contracts 命名空间
- 这些协定利用运行时检查改进了测试,启用了静态协定验证并支持文档生成
- 更多信息,请参见代码协定
- 动态语言运行时
- 动态语言运行时 (DLR) 是一种新运行时环境,它将一组适用于动态语言的服务添加到 CLR
- 借助于 DLR,可以更轻松地开发要在 .NET Framework 上运行的动态语言
- System.Dynamic 命名空间
- 参见动态语言运行时概述
- 协变和逆变
- 现在,有多个泛型接口和委托支持协变和逆变
- 更多信息,请参见泛型中的协变和逆变
- BigInteger和复数
- 新的 System.Numerics.BigInteger 结构是一个任意精度 Integer 数据类型,它支持所有标准整数运算
- 可以通过任何 .NET Framework 语言使用该结构
- 一些新 .NET Framework 语言(例如 F# 和 IronPython)对此结构具有内置支持
- 元组
- 包含结构化数据的元组对象的 System.Tuple 类
- 提供了泛型元组类以支持具有 1 到 8 个组件的元组
- 提供了一个具有 7 个类型参数和任何元组类型的第 8 个参数的泛型元组类
- 文件系统枚举改进
- 新的文件枚举方法可以提高访问大文件目录或循环访问大文件中的行的应用程序的性能。
- 内存映射文件
- 可以使用内存映射文件编辑非常大的文件和创建共享内存以进行进程间通信
- 其他新增语言特性
- 新的 String.IsNullOrWhiteSpace 方法指示字符串是否为 null、为空或仅包含空白字符
- 您可以使用 String.Concat 方法将可枚举集合中的每个元素连接在一起,而无需先将元素转换成字符串
- 可以使用的两种新的简便方法是:StringBuilder.Clear 和 Stopwatch.Restart
- 现在可以使用从 System.IO.Stream 类继承的类中的 CopyTo 方法轻松地将一个流复制到另一个流中
- 新的 System.IObservable<T> 和 System.IObserver<T> 接口为基于推送的通知提供通用机制
- 现在可以通过将类型包装在 System.Lazy<T> 类内部,为任何自定义类型启用迟缓初始化
- System.IO.Compression.DeflateStream 和 System.IO.Compression.GZipStream 类的压缩算法得到了改进
- 可以使用 Thread.Yield 方法让调用线程执行准备好在当前处理器上运行的另一个线程
- System.Guid 结构现在包含 TryParse 和 TryParseExact 方法
- Managed Extensibility Framework
- 并行计算
- .NET Framework 4 引入了用于编写多线程和异步代码的新编程模型,极大地简化了应用程序和库开发人员的工作
- 通过固有方法编写高效、细化且可伸缩的并行代码,而不必直接处理线程或线程池
- 新的 System.Threading.Tasks 命名空间和其他相关类型支持此新模型
- 并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现,能够通过声明性语法实现类似功能
- 详见:.NET Framework 中的并行编程
- 可选参数和命名参数
- 应用场景:主要考虑与COM组件交互互操作的场景
- 可选参数属性 OptionalAttribute 命名参数属性 DefaultParameterValueAttribute
- 延迟初始化
- 对象的创建将会延迟至第一次使用该对象时
- 延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求
- Lazy<T> 及其相关的类型还支持线程安全,并提供一致的异常传播策略
- System.Lazy<T> 一个包装类,可为任意类库或用户定义的类型提供延迟初始化语义
- System.Threading.ThreadLocal<T>,类似于 Lazy<T>,只不过它基于本地线程提供延迟初始化语义。每个线程都可以访问自己的唯一值
- System.Threading.LazyInitializer<T>,为对象的延迟初始化提供高级的 static方法,此方法不需要类开销
- Lazy<T>,isThreadSafe和LazyThreadSafetyMode(线程安全模式)参数,对象的线程安全
- 使用任何采用初始化方法(valueFactory 参数)的 System.Lazy<T> 构造函数时,会启用异常缓存
- 如果您使用不指定初始化方法的 System.Lazy<T> 构造函数,则不会缓存 T 默认构造函数引发的异常
- 使用 PublicationOnly,通过争用初始化,在这种情况下,不缓存异常,访问 Value 属性的尝试可以继续下去,直到初始化成功
- 以并行方式循环访问数据源时,可以使用具有对线程本地数据的内置支持的重载
- 如何:编写具有线程局部变量的 Parallel.ForEach 循环
- 并发集合支持
- 新的同步基元
- 新的同步基元通过避免使用旧版多线程处理代码中高开销的锁定机制,实现细化的并发和更快的性能
- System.Threading.Barrier
- System.Threading.CountdownEvent
- System.Threading.ManualResetEventSlim
- System.Threading.SemaphoreSlim
- System.Threading.SpinLock
- System.Threading.SpinWait
- 聚合异常
- System.AggregateException 类型可用于捕获在不同线程上同时引发的多个异常,并将它们作为单个异常返回到联接线程
【C#版本详情回顾】C#4.0主要功能列表的更多相关文章
- 【C#版本详情回顾】C#2.0主要功能列表
泛型 优点:类型安全/重用代码/提升性能 应用:泛型接口.泛型类.泛型类型参数.泛型方法.泛型事件和泛型委托 命名空间:System.Collections.Generic 特性:泛型约束,defau ...
- 【C#版本详情回顾】C#3.0主要功能列表
隐式类型的本地变量和数组 在与本地变量一起使用时,var 关键字指示编译器根据初始化语句右侧的表达式推断变量或数组元素的类型 对象初始值设定项 支持无需显式调用构造函数即可进行对象初始化 集合初始值设 ...
- 【转帖】sysbench使用教程(包含ubuntu自带的0.4版本、0.5版本和最新的1.0版本)
sysbench使用教程(包含ubuntu自带的0.4版本.0.5版本和最新的1.0版本) 2018年08月10日 09:54:42 cxin917 阅读数 429 版权声明:本文为博主原创文章, ...
- [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向
[.net 面向对象程序设计深入](4)MVC 6 ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0 ...
- PyQt 5.2 发布,此版本完全支持Qtv5.2.0
PyQt 5.2 发布,此版本完全支持Qtv5.2.0 :包括了新的 QtBluetooth,QtPositioning,QtMacExtras,QtWinExtras 和 Qt11Extras 模板 ...
- virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以
virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...
- Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR tensorflow-1.13.1和1.14windows版本目前不支持CUDA10.0
报错出现 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR tensorflow-1.13.1和1.14windows版本目前不支持 ...
随机推荐
- NFS文件系统配置 和 GLIBC更新
为了配置集群环境,把过程记录一下,方便后续使用 NFS 文件系统 是 network file system 配置好ssh无密码访问 ,各节点为centos6.5 主节点 在文件/etc/expor ...
- ASP.NET农历时间显示(两)
在拍摄的月球时前(http://blog.csdn.net/yysyangyangyangshan/article/details/6802950),只是没有进行封装使用起来须要手动改动. 本次进行简 ...
- 你的Java代码对JIT编译友好么?(转)
JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...
- uva 10228 - Star not a Tree?(模拟退火)
题目链接:uva 10228 - Star not a Tree? 题目大意:给定若干个点,求费马点(距离全部点的距离和最小的点) 解题思路:模拟退火算法,每次向周围尝试性的移动步长,假设发现更长处, ...
- JavaScript之对象序列化详解
一.什么是对象序列化? 对象序列化是指将对象的状态转换为字符串(来自我这菜鸟的理解,好像有些书上也是这么说的,浅显易懂!): 序列化(Serialization)是将对象的状态信息转换为可以存储或传输 ...
- EasyUI 扩展自己定义EasyUI校验规则 验证规则(经常使用的)
比如 校验输入框仅仅能录入0-1000之间 最多有2位小数的数字 表单<input type="text" id="rate" name="ra ...
- VC编程 快捷键增加的几种方式
VB运行时菜单字母的下划线消失 vc 给菜单增加快捷键RT给Menu里面的 文件 帮助 查看 等功能键加上一个快捷方式.比如按Ctrl+F1 就弹出查看下面的子功能.------解决方案------- ...
- Visual Studio GitHub For Windows部署
使用GitHub For Windows部署Visual Studio项目 因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理 ...
- HDU 2616 Kill the monster (暴力搜索 || 终极全阵列暴力)
主题链接:HDU 2616 Kill the monster 意甲冠军:有N技能比赛HP有M怪物,技能(A,M),能伤害为A.当怪兽HP<=M时伤害为2*A. 求打死怪兽(HP<=0)用的 ...
- 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...