Go to my github

随笔分类 -  【016】【译】.NET 7 中的性能改进

摘要:【译】.NET 7 中的性能改进(十三)原文 | Stephen Toub 翻译 | 郑子铭 代码生成 (Code generation) .NET 7的regex实现有不少于四个引擎:解释器(如果你不明确选择其他引擎,你会得到什么),编译器(你用RegexOptions.Compiled得到什么),非回溯引擎(你用RegexOption 阅读全文
posted @ 2023-03-07 23:50 郑子铭 阅读(562) 评论(0) 推荐(1) 编辑
摘要:【译】.NET 7 中的性能改进(十二)原文 | Stephen Toub 翻译 | 郑子铭 New APIs 在.NET 7中,Regex得到了几个新的方法,所有这些方法都能提高性能。新的API的简单性可能也误导了为实现它们所需的工作量,特别是由于新的API都支持ReadOnlySpan输入到regex引擎。 dotnet/runtim 阅读全文
posted @ 2023-03-06 23:19 郑子铭 阅读(587) 评论(0) 推荐(3) 编辑
摘要:【译】.NET 7 中的性能改进(十一)原文 | Stephen Toub 翻译 | 郑子铭 同样,为了不做不必要的工作,有一个相当常见的模式出现在string.Substring和span.Slice等方法中。 span = span.Slice(offset, str.Length - offset); 这里需要注意的是,这些方法都有 阅读全文
posted @ 2023-03-05 23:35 郑子铭 阅读(562) 评论(0) 推荐(3) 编辑
摘要:【译】.NET 7 中的性能改进(十)原文 | Stephen Toub 翻译 | 郑子铭 最后一个有趣的与IndexOf有关的优化。字符串早就有了IndexOf/IndexOfAny/LastIndexOf/LastIndexOfAny,显然对于字符串来说,这都是关于处理字符。当ReadOnlySpan和Span出现时,MemoryE 阅读全文
posted @ 2023-03-02 23:35 郑子铭 阅读(658) 评论(0) 推荐(6) 编辑
摘要:【译】.NET 7 中的性能改进(九)原文 | Stephen Toub 翻译 | 郑子铭 原始类型和数值 (Primitive Types and Numerics) 我们已经看过了代码生成和GC,线程和矢量化,互操作......让我们把注意力转向系统中的一些基本类型。像int、bool和double这样的基本类型,像Guid和Dat 阅读全文
posted @ 2023-03-01 23:32 郑子铭 阅读(601) 评论(0) 推荐(6) 编辑
摘要:【译】.NET 7 中的性能改进(八)原文 | Stephen Toub 翻译 | 郑子铭 Mono 到目前为止,我一直提到 "JIT"、"GC "和 "运行时",但实际上在.NET中存在多个运行时。我一直在谈论 "coreclr",它是推荐在Linux、macOS和Windows上使用的运行时。然而,还有 "mono",它为Blazo 阅读全文
posted @ 2023-02-28 23:28 郑子铭 阅读(1222) 评论(0) 推荐(10) 编辑
摘要:【译】.NET 7 中的性能改进(七)原文 | Stephen Toub 翻译 | 郑子铭 Arm64 在.NET 7中,大量的努力用于使Arm64的代码生成与x64的代码生成一样好或更好。我已经讨论了一些与架构无关的PR,还有一些是专门针对Arm的,但还有很多。我们来列举其中的一些。 寻址模式 (Addressing modes) " 阅读全文
posted @ 2023-02-27 23:38 郑子铭 阅读(677) 评论(0) 推荐(6) 编辑
摘要:【译】.NET 7 中的性能改进(六)原文 | Stephen Toub 翻译 | 郑子铭 矢量化 (Vectorization) SIMD,即单指令多数据 (Single Instruction Multiple Data),是一种处理方式,其中一条指令同时适用于多条数据。你有一个数字列表,你想找到一个特定值的索引?你可以在列表中一次 阅读全文
posted @ 2023-02-26 22:14 郑子铭 阅读(610) 评论(4) 推荐(8) 编辑
摘要:【译】.NET 7 中的性能改进(五)原文 | Stephen Toub 翻译 | 郑子铭 循环提升和克隆 (Loop Hoisting and Cloning) 我们之前看到PGO是如何与循环提升和克隆互动的,这些优化也有其他改进。 从历史上看,JIT对提升的支持仅限于将一个不变量提升到一个层级。 考虑一下这个例子: [Benchma 阅读全文
posted @ 2023-02-23 22:43 郑子铭 阅读(462) 评论(0) 推荐(7) 编辑
摘要:【译】.NET 7 中的性能改进(四)原文 | Stephen Toub 翻译 | 郑子铭 边界检查消除 (Bounds Check Elimination) 让.NET吸引人的地方之一是它的安全性。运行时保护对数组、字符串和跨度的访问,这样你就不会因为走到任何一端而意外地破坏内存;如果你这样做,而不是读/写任意的内存,你会得到异常。当 阅读全文
posted @ 2023-02-22 22:22 郑子铭 阅读(511) 评论(0) 推荐(6) 编辑
摘要:【译】.NET 7 中的性能改进(三)原文 | Stephen Toub 翻译 | 郑子铭 PGO 我在我的 .NET 6 性能改进一文中写了关于配置文件引导优化 (profile-guided optimization) (PGO) 的文章,但我将在此处再次介绍它,因为它已经看到了 .NET 7 的大量改进。 PGO 已经存在了很长时 阅读全文
posted @ 2023-02-21 23:39 郑子铭 阅读(665) 评论(0) 推荐(4) 编辑
摘要:【译】.NET 7 中的性能改进(二)原文 | Stephen Toub 翻译 | 郑子铭 堆栈替换 (On-Stack Replacement) 堆栈替换 (OSR) 是 .NET 7 中最酷的 JIT 功能之一。但要真正了解 OSR,我们首先需要了解分层编译 (tiered compilation),所以快速回顾一下…… 具有 JI 阅读全文
posted @ 2023-02-20 22:02 郑子铭 阅读(746) 评论(0) 推荐(6) 编辑
摘要:【译】.NET 7 中的性能改进(一)原文 | Stephen Toub 翻译 | 郑子铭 一年前,我发布了.NET 6 中的性能改进,紧接着是.NET 5、.NET Core 3.0、.NET Core 2.1和.NET Core 2.0的类似帖子。我喜欢写这些帖子,也喜欢阅读开发人员对它们的回复。去年的一条评论特别引起了我的共鸣。评 阅读全文
posted @ 2023-02-19 23:17 郑子铭 阅读(2208) 评论(0) 推荐(20) 编辑

点击右上角即可分享
微信分享提示