写点什么

.NET Core 运行时和基础类库性能提升

  • 2017-06-27
  • 本文字数:1603 字

    阅读完需:约 5 分钟

微软宣布改进了.NET Core 运行时和基础类库的性能。虽然没有像改进ASP.NET Core 的性能那样大肆宣传,但这些改进同样重要。

其中,以下10 个方面的变化比较显著:集合、LINQ、压缩、加密、数学运算、序列化、文本处理、文件I/O、网络和并发。至于任何一组性能变化如何影响具体的应用程序则取决于具体的使用模式。下面的讨论只列出了一些要点,让你对这些改进有一个大概的了解。其中有许多变化是基于开源Pull Request 请求。这样,一些对于微软而言因为总体影响极小而不值得实现的重要修改就可以实现了。而这些修改对于很大一部分开发人员而言相当重要。

集合几乎在任何应用程序中都有广泛的应用。许多操作都通过简化集合或降低复杂度得到了改进。其中有些改进得益于减少开销,如简化操作实现更好的内联,或者减少指令数量。SortedSet 的构造函数得到了修复,因为最初该构造函数采用了一种简单的方式编写,在处理重复时可扩展性不是很好。SortedSet 的Min 和 Max 不需要遍历整棵树。List.Add 的速度更快了。不只是System.Collections.Generic 得到了改进,其他命名空间如System.Collections.Concurrent 也得到了改进。 ConcurrentQueue 和ConcurrentBag 基本上重写了。LINQ 用户应用仅从集合的改进就可以感受到性能的提升了。

此外,LINQ 本身的性能也是一个改进方面。为了减少内存分配的数量和大小以及简化算法,.NET Core 的许多操作符都重写了。例如,Enumerable.Concat 可以确保串联多个Enumerable 时线性增长,而不是指数增长。ToList 和Select 操作符经过了简化,减少了内存分配和委托及接口的使用,同时将字段读写最小化,避免了复制。Enumerable.ToArray 现在对内部缓冲区的管理也更好了。

与集合和LINQ 操作内存不同,压缩通常是受CPU 限制。例如,DeflateStream 现在使用了一个原生解压库。该原生解压库也经过了优化。

在加密方面,SHA256.Create 使用了一种原生实现,如Windows 上的CNG,或Unix 上的OpenSSL。

数学运算操作在操作BigInteger 时的性能得到了提升。

二进制序列化是CPU、数据和内存密集型的。.NET Core 2.0 增加了BinaryFormatter,并允许O(N) 算法在切换到O(N2) 算法之前使用更长的时间。现在,较大的序列化输入可以更快地处理了。

对于文本处理,Regex.IsMatch 在内存分配方面更高效了,而且,由于数据缓存方式的变化,垃圾收集也更高效了。WebUtility.UrlDecode 不再对输入做实际上并不需要的解码了。微软针对一些内置的Encoding 派生类型进行了循环优化。

微软对字符串操作也做了许多改进。Enum.Parse 在内存使用方面更高效了,所以垃圾收集也更高效了。各种ToString 方法也经过了改进。String 类本身的方法也经过了改进,如IndexOf 和StartsWith。考虑到字符串在应用程序中使用比较多,这样的改进应该会产生巨大的影响。

文件I/O 经过了改进。使用异步读写的FileStreams 现在效率更高了。

底层网络协议栈经过了改进。异步套接字现在允许此类操作实际上同步完成,从而避免异步完成的开销。这些类型的变化对于使用套接字原语的上层函数有很大的影响。与上层网络类如NetworkStream 和 SslStream 相关的工作也是一个改进的来源。

对并发与并行的修改工作已经开展。许多.NET 应用程序使用ThreadPool 类。例如,QueueUserWorkItem 使用一个同步控制和内存分配更少的队列取代了全局队列,大大减少了垃圾收集工作。对于类似SpinLock 这样的同步原语,相关的改进工作一直在进行。SpinLock.TryEnter 经过了改进,当无法立即获得锁时,它会更快地失败。对于使用这个类的热门执行路径,这项改进带来了巨大的性能提升。

在这一轮的性能改进工作中,有大约1000 个Pull Request 被合并进来,而需要完成的工作还有许多。总之,在增加基于性能的API 及改进现有库方面,性能提升有更高的优先级。

BenchmarkDotNet 对这些修改做了一些独立的测试

查看英文原文.NET Core Runtime and Base Class Library Performance

2017-06-27 19:003017
用户头像

发布了 1008 篇内容, 共 449.0 次阅读, 收获喜欢 346 次。

关注

评论

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

2025海外红人营销最值得关注的五个趋势

Wolink

跨境电商 电商营销 出海企业 海外营销推广 达人营销

企业出海战略全景图:从0到1的路径规划与关键决策点

Wolink

跨境电商 出海企业 海外社媒营销 海外营销推广 达人营销

快递鸟MCP模式对接文档

快递鸟

企业海外营销战略蓝图:构建从市场进入到品牌增长的完整路径

Wolink

企业出海 海外社媒营销 海外营销推广 品牌出海 达人营销

一图速通!嘉为蓝鲸2025秋季IT研运全流程新品发布总览

嘉为蓝鲸

研发效能 智能运维 研运一体化 IT研运 秋季发布

首都在线20周年生态伙伴大会圆满落幕,共绘开放异构智算新图景

极客天地

AI 智慧巡检系统:构建工业设备智能运维新范式

上海拔俗

开发者的 “变现神器”,代码能当 “摇钱树”

微擎应用市场

如何自动化清理 Active Directory 中的非活动用户帐户?

运维有小邓

AD域 AD域管理 AD域组管理

AI 抽烟识别智能监控系统:构建智能化公共环境管理新范式

上海拔俗

最常见的海外推广形式都有哪些?

Wolink

跨境电商 出海企业 海外社媒营销 海外营销推广 达人营销

行业深度:电商和游戏海外推广的差异化策略

Wolink

游戏出海 跨境电商 出海企业 海外营销推广 品牌出海

从“中国制造”到“全球品牌”:出海企业的品牌定位与营销破局

Wolink

企业出海 跨境电商 电商营销 海外营销推广 达人营销

AI 智能分析决策系统:驱动企业数字化转型的核心引擎

上海拔俗

JimuReport 积木报表 v2.1.5 版本发布,免费的可视化报表和大屏

JEECG低代码

数据可视化 报表 积木报表 报表工具 大屏设计器

AI 运动小程序:重新定义数字化时代的个性化健身体验

上海拔俗

Python+淘宝API:3步爬取10万条商品评论(附反爬破解技巧)

Datafox(数据狐)

淘宝评论API 淘宝数据爬虫 淘宝商品评论采集 淘宝商品评论API

构建定时 Agent,基于 Spring AI Alibaba 实现自主运行的人机协同智能 Agent

阿里巴巴云原生

阿里云 AI 云原生 agent

如何利用海外红人营销平台宣传品牌,抢占市场先机?

Wolink

电商营销 海外社媒营销 海外营销推广 沃链Wolink 达人营销

AI 图像识别算法:从技术突破到产业赋能的实践之路

上海拔俗

【浪潮海岳inDataX数据中台专栏】数据门户-多类信息资源展示技术

inBuilder低代码平台

数据中台 数据治理 数据集成 inDataX 企业数据资产

AI 视频分析系统:智能解析动态影像,赋能行业数字化转型

上海拔俗

AI幻觉的真相:为什么ChatBI会“说谎”?

飞鲤

Data + AI ChatBI

云栖实录 | 驰骋在数据洪流上:Flink+Hologres驱动零跑科技实时计算的应用与实践

阿里云大数据AI技术

flink 阿里云 实时计算 hologres 零跑科技

单体架构中的事件驱动架构:Java应用程序的渐进式重构

码界行者

Java Event Driven

AI 智能信息化系统:驱动企业数字化转型的核心引擎

上海拔俗

从“隐形冠军”到“全球品牌”:企业海外营销的四阶段模型

Wolink

企业出海 跨境电商 海外营销推广 品牌出海 达人营销

天翼云智慧上云月特惠来袭,智算上云正当时!

天翼云开发者社区

CDN 存储 云主机 算力 云电脑

阿里巴巴 AI Coding 分享会 Qoder Together 杭州站来啦!

阿里巴巴云原生

阿里云 Qoder

第七届电子工程与信息学国际学术会议(EEI 2025)

搞科研的小刘

电子工程 国际学术会议 信息学

第五届人工智能、机器人和通信国际会议(ICAIRC 2025)

搞科研的小刘

人工智能 机器人 国际学术会议

.NET Core运行时和基础类库性能提升_.NET_Michael Stiefel_InfoQ精选文章