写点什么

.NET 4.5 对 Base Class Library 做出改善

  • 2012-07-04
  • 本文字数:1193 字

    阅读完需:约 4 分钟

Base Class Library 是.NET 开发平台的核心。不管你使用了何种配置或者前端技术,都会在应用程序中找到使用 BCL 的地方。以下是期望在.NET 4.5 中做出改善的地方:

System.IO

对于耗费大量资源的操作,Stream、TextReader 和 TextWriter 类都拥有了新的 async 方法。这里的消耗我们指的是“可能会在一次操作中做大量工作”。而像 TextReader.Peek 之类的方法不会获得 async 版本的方法。背后的原因在于,坦率地说,async 操作并不会节省资源。它们需要分配 Task 对象,可能还需要做上下文切换,处理缓存可能失效的情况,因此总体上不适合用于严格的循环中。 Immo Landwerth 接着说到,

一般的指导原则是: 让你的异步操作尽可能地厚重。例如,如果你想要使用 BinaryReader 从流中读取 1000 个 Int32 的数据,最好运行并等待一个任务同步地读取所有 1000 条数据,而不是分别运行并等待 1000 个任务,每个任务都只读取一条 Int32 数据。

说到 BinaryReader,你现在可以告诉它不要自动关闭它所包装的流。这个特性对 BinaryWriter、StreamReader 和 StreamWriter 同样适用。

Immo 还提到,.NET BCL 现在使用了开源程序库zlib 来实现System.IO.Compression 命名空间。这包括对DeflateStream 性能的修正,以及新的 ZipArchive 类。这并非是 zlib 第一次被微软使用,它还用于 Windows 的 Zip 文件支持和 WPF 中。

System.Collection

我们已经谈到了.NET 4.5 中的只读集合,到现在为止其中并没有显著改变。值得注意的一种被遗漏的特性是IReadOnlySet,它被用于匹配HashSet 和ISet。

抽象类Comparer 使用了一些函数式编程的优势。你不能显式地实现这个类,而是需要调用 Comparer.Create ,在一个比较函数中传递它,然而让它来负责其他处理。

很少有人知道 ArraySegment 结构,它也获得了重大改进,第一次真正实现了让它变得有用的接口,像 IEnumerable 和 IList。然而,它只对裸数组(naked arrays)有效,大多数开发者更喜欢使用更高级别的集合类,像 List。

杂项

AssemblyMetadataAttribute 现在是对集合赋予任意键值对的标准方式。你可能不清楚为什么会使用它,而不是定义自定义的属性,但是如果你想的话就可以那样用。

Console 现在让你知道输入、输出或者错误流是否被重定向。你可能最多是使用它来禁用依赖于设置鼠标位置或者改变屏幕颜色的特性。如果你需要支持额外的字符,还可以把编码变更为 Encoding.Unicode。

WeakReference 提供了替换 WeakReference 的类型安全的方法。为了消除长期存在的竞争条件,WeakReference 不再提供单独的 IsAlive 和 TryGetTarget 方法。取而代之的是,它们被组合到 TryGetTarget 之中。

不幸的是,看起来我们不会有相匹配的 WeakDelegate,如果存在的话,会让实现弱事件更容易。

Regex 现在支持 Timeout 属性。这是很重要的工具,当允许用户注入任意的正则表达式的时候,可以避免拒绝服务攻击。

查看英文原文:.NET 4.5 Improves to the Base Class Library

2012-07-04 03:382364
用户头像

发布了 340 篇内容, 共 146.8 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

工具 | pg_recovery 设计原理与源码解读

RadonDB

数据库 postgresql 源码 RadonDB

猫,量子力学,和手机人像摄影之变

脑极体

CSS布局(六)之居中布局

Augus

CSS 11月日更

如何通过mock数据提高前端开发效率?

石云升

大前端 Mock 职场经验 11月日更

在线VLOOKUP数据查找工具

入门小站

工具

献出我的膝盖!这份“基础-中级-高级”Java程序员面试集结,看完我是说直接跪了

热爱java的分享家

Java 架构 面试 程序人生 经验分享

非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer

热爱java的分享家

Java 架构 面试 阿里 经验分享

虚拟偶像,人类探索元宇宙的萌芽

CECBC

Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)

不脱发的程序猿

Python GUI设计 PyQt5 绘图功能

为什么Git用SHA做版本控制,而非像SVN用int数字或者是时间戳

吴脑的键客

git 学习

分享8个可以编译为JavaScript的语言

devpoint

typescript 函数式编程 11月日更 ClojureScript Clojure

充分挖掘数字人民币的三个隐性价值

CECBC

Go语言学习查缺补漏ing Day8

Regan Yue

Go 语言 11月日更

水晶球“数据洞察”正式上线:洞悉用量趋势变化,觉察互动体验细节

RTE开发者社区

人工智能 水晶球 数据洞察

如何使用 Workbench 远程连接到 MySQL 数据库 -MySQL Workbench 使用教程

蒋川

MySQL 数据库 MySQL 数据库

Prometheus Exporter (十二)Consul Exporter

耳东@Erdong

Prometheus Consul exporter 11月日更

InfoQ 写作平台优质创作者签约计划第二季,我们来了!

InfoQ写作社区官方

签约计划第二季 热门活动

如何使用 Flutter 创建桌面应用程序【Flutter专题1】

坚果

flutter 签约计划第二季

C#中的yield

喵叔

11月日更

Python代码阅读(第64篇):角度与弧度互转

Felix

Python 编程 Code 阅读代码 Python初学者

掘金新大陆——最后一个十亿蓝海

超强实时跟踪系统首次开源!支持跨镜头、多类别、小目标跟踪!

百度开发者中心

AI 实时跟踪

在 Flutter 中使用 http包【Flutter专题2】

坚果

flutter 签约计划第二季

ExoPlayer播放在线TS文件无声音问题分析

Changing Lin

11月日更

数据分析从零开始实战,Pandas读写TSV/Json数据

老表

Python json 数据分析 11月日更

7张图揭晓RocketMQ存储设计的奥妙

中间件兴趣圈

RocketMQ 存储 消息队列 Apache RocketMQ

26 K8S之Service资源调度

穿过生命散发芬芳

k8s 11月日更

Apache ShardingSphere 5.0.0 内核优化及升级指南

SphereEx

数据库 开源 架构 ShardingSphere SphereEx

【高并发】朋友去面试竟然栽在了Thread类的源码上

冰河

Java 并发编程 多线程 高并发 异步编程

linux如何将输出重定向到文件和标准输出

入门小站

Linux

如何使用 MySQL Workbench 自动生成 ER 图、同步更新远程数据库 - MySQL Workbench 使用教程

蒋川

MySQL 数据库 数据管理工具

.NET 4.5对Base Class Library做出改善_语言 & 开发_Jonathan Allen_InfoQ精选文章