写点什么

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

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

关注

评论

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

华为“补洞”:去年重新设计超过6000万行代码

罗燕珊

华为 实体清单

谈谈控制感(6):虚幻的控制感也好用

史方远

职场 心理 成长

回“疫”录(20):世界从来不会欺负听话的人

小天同学

疫情 回忆录 现实纪录 纪实

如何搞定Kafka重复消费?

奈学教育

kafka kafka配置

键入网址后,其间发生了什么?

小林coding

TCP 计算机网络 网络协议 IP HTTP

2020第一篇技术博客

java劝退师首席大弟子

生活

写在开头

宋胖子

解决 Django 多进程下,logging 记录日志错乱问题

AlwaysBeta

Python django 编程 日志 log

CentOS 6 升级 glibc

wong

centos glibc

英语学习中听和说的区别

董一凡

学习

Dart 进阶 | 深入理解 Function & Closure

LitaVadaski

flutter dart

Android | Tangram动态页面之路(三)使用

哈利迪

android

PhotoShop切图,一篇文章就够用了

cwang

Web 工具 PhotoShop

用原理认知世界,用情绪驱动行为

史方远

职场 心理 成长

汉字不能编程?别闹了,只是看着有点豪横!容易被开除!

小傅哥

spring 小傅哥 aop 汉字编程

中小企业如何做运维自动化?

外滩运维专家

运维 spug 运维自动化 jenkins ansible

写作对我的意义

Neco.W

总结 思考 写作 感悟

《零基础学 Java》 FAQ 之 8-Java方法调用是传值还是传引用

臧萌

Java

一想到有95%的问题还没解决,我就calm down了

赵新龙

科普 宇宙 后真相时代

MySQL事务解析

一个有志气的DB

MySQL 事务隔离级别 mysql事务

笔记:《如何系统思考》之如何应用系统思考

wiflish

思维方式

比AtomicLong更优秀的LongAdder确定不来了解一下吗?

一枝花算不算浪漫

并发编程 jdk源码

JAVA内存模型与线程

颇风

Java 内存模型 JVM

走进Golang之编译器原理

何磊

编译原理 Go 语言

Design Sprint 教你五天完成产品迭代

Yanel 说敏捷产品

产品 敏捷 设计 产品设计 团队

如何发布一个npm包-创建,发布,更新,撤销及常见问题解决

Brave

npm

一文带你了解 HTTP 黑科技

苹果看辽宁体育

大前端 HTTP

新mac笔记本需要做的事情

好好学习

Mac

如何用一套引擎搞定机器学习全流程?

Apache Flink

大数据 flink 流计算 实时计算

识别代码中的坏味道(二)

Page

Java 面向对象 复杂代码优化 重构 CleanCode

Jenkins权限管理

kcnf

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