写点什么

.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:382084
用户头像

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

关注

评论

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

JS事件详解和js事件委托

编程江湖

一人走路不孤独,小度化身百度地图导航NPC,伴你回家路

百度大脑

Serverless 年终技术盘点 :工业、学术、社区遍地开花

Serverless Devs

云计算 阿里云 Serverless

了解一下DDD领域驱动设计

蜜糖的代码注释

Java DDD 领域模型 2月月更

让所有工具变成你的锤子 — 邂逅《Every Tool's a Hammer》

蔡超

方法论 学习笔记 软件架构

聚力同行,迈向零碳未来

大咖说

云计算 阿里巴巴 阿里云 数智化

抽奖| Apache Pulsar 社区新年福袋来啦

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

春节消费观察:四种愉悦感,抓住女人心

脑极体

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

王磊

SpringCloud Alibaba

盘点下近几年退役的顶级 Apache 大数据项目 - 继 Sentry,Sqoop 之后,Ambari 正式退役

明哥的IT随笔

大数据 ambari sqoop sentry

Milvus 2.0 正式 GA

Zilliz

数据库 AI

Apache POI详解及Word文档读取示例

程序员架构进阶

Java Apache POI 2月月更

Linux之free命令

入门小站

Linux

暂时不在更新

你?

Apache Druid 在 Shopee 的工程实践

Shopee技术团队

数据库 后端 Apache Druid

人人都是 Serverless 架构师 | 弹幕应用开发实战

Serverless Devs

Serverless 弹幕 应用开发

职场焦虑之我对35岁危机的看法

老张

35岁危机 职场发展

云效交付篇:流水线持续交付 | 云效快速入门

阿里云云效

阿里云 DevOps 云原生 持续交付 研发

2021 Apache Pulsar 中文社区先锋奖与年度优秀案例奖出炉!

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

低代码实现探索(三十一)管好你的组件--元信息

零道云-混合式低代码平台

架构实战营模块七 作业

Jude

架构实战营

GitLab + Jenkins + ACK 自动化部署方案

百瓶技术

运维 jenkins 自动化部署 #GitLab ACK

Java常见数据结构详解

编程江湖

Hadoop运行环境搭建

编程江湖

hadoop

Python代码阅读(第74篇):单词首字母转换成大写

Felix

Python 编程 字符串 阅读代码 Python初学者

微服务从代码到k8s部署应有尽有系列(一)

万俊峰Kevin

Go 微服务 web开发 go-zero RPC框架

Apache Pulsar 2021 年度盘点(结尾有惊喜)

Apache Pulsar

开源 云原生 中间件 社区 Apachepulsar

为什么你辛苦肝的博客没人看?搭框架、排版、画图技巧这些你真的懂么?

码哥字节

排版规范 写作技巧 2月月更

Serverless 应用优化四则秘诀

Serverless Devs

Serverless

容器编排技术 Kubernetes 学习总结|社区征文

架构精进之路

云原生 新春征文 2月日更

虎年开工大吉|Hoo研究院2022年0207期区块链简报

区块链前沿News

Hoo 虎符交易所 虎符研究院 虎年

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