方法数组长度平均值分配OrderBy100051.13 μs27.61 KBOrder100050.82 μs19.77 KB在这个基准中 , 只使用了.NET 7,因为Order()
方法在旧的运行时中不可用 。
我们无法看到这两种方法之间的性能影响 。然而 , 我们可以看到的是在堆内存分配方面有很大的改进 , 这将显著减少垃圾收集 , 从而节省一些GC时间 。
System.IO在.NET 7中,Windows下的IO性能有了些许改善 。WriteAllText()
方法不再使用那么多分配的内存,ReadAllText()
方法与.NET 6相比也快了一些 。
[Benchmark]public void WriteAllText() => File.WriteAllText(path1, content);[Benchmark]public string ReadAllText() => File.ReadAllText(path2);
方法运行时平均值比率分配WriteAllText
文章插图
193.50 μs1.0310016 BWriteAllText
文章插图
187.32 μs1.00464 BReadAllText
文章插图
23.29 μs1.0824248 BReadAllText
文章插图
21.53 μs1.0024248 B序列化 (System.Text.Json)来自
System.Text.Json
命名空间的JsonSerializer
得到了一个小小的升级,一些使用了反射的自定义处理程序会在幕后为你缓存,即使你初始化一个JsonSerialzierOptions
的新实例 。private JsonSerializerOptions options = new JsonSerializerOptions();private TestClass instance = new TestClass("Test");[Benchmark(Baseline = true)]public string Default() => JsonSerializer.Serialize(instance);[Benchmark]public string CachedOptions() => JsonSerializer.Serialize(instance, options);[Benchmark]public string NoCachedOptions() => JsonSerializer.Serialize(instance, new JsonSerializerOptions());public record TestClass(string Test);
在上面代码中 , 对NoCachedOptions()
的调用通常会导致JsonSerialzierOptions
的额外实例化和一些自动生成的处理程序 。在.NET 7中这些实例是被缓存的,当你在代码中使用这种方法时,你的性能会好一些 。否则,无论如何都要缓存你的JsonSerialzierOptions
, 就像在CachedOptions
例子中,你不会看到很大的提升 。方法运行时平均值比率分配分配比率Default
文章插图
135.4 ns1.04208 B3.71CachedOptions
文章插图
145.9 ns1.12208 B3.71NoCachedOptions
文章插图
90,069.7 ns691.897718 B137.82Default
文章插图
130.2 ns1.0056 B1.00CachedOptions
文章插图
129.8 ns0.9956 B1.00NoCachedOptions
文章插图
533.8 ns4.10345 B6.16基本类型1. Guid 相等比较有一项改进,肯定会导致现代应用程序的性能大增 , 那就是对
Guid
相等比较的新实现 。private Guid guid0 = Guid.Parse("18a2c952-2920-4750-844b-2007cb6fd42d");private Guid guid1 = Guid.Parse("18a2c952-2920-4750-844b-2007cb6fd42d");[Benchmark]public bool GuidEquals() => guid0 == guid1;
方法运行时平均值比率GuidEquals文章插图
1.808 ns1.49GuidEquals
文章插图
1.213 ns1.00可以感觉到,新的实现也使用了SIMD , 比旧的实现快30%左右 。
文章插图
由于有大量的API使用
Guid
作为实体的标识符,这肯定会积极的产生影响 。2. BigInt 解析一个很大的改进发生在将巨大的数字从字符串解析为
BigInteger
类型 。就我个人而言,在一些区块链项目中,我曾使用过BigInteger
类型,在那里有必要使用这种类型来表示ETH代币的精度 。所以在性能方面,这对我来说会很方便 。private string bigIntString = string.Concat(Enumerable.Repeat("123456789", 100000));[Benchmark]public BigInteger ParseBigInt() => BigInteger.Parse(bigIntString);
方法运行时平均值比率分配ParseBigInt推荐阅读
- dubbo的一系列配置与搭建
- 记一次 .NET 某娱乐聊天流平台 CPU 爆高分析
- vivox60充电时间_vivox60充电快吗
- MassTransit | .NET 分布式应用框架
- 基于PL022 SPI 控制器 海思3516系列芯片SPI速率慢问题深入分析与优化
- 4 .NET 6学习笔记——如何在.NET 6的Desktop App中使用Windows Runtime API
- 学习ASP.NET Core Blazor编程系列八——数据校验
- 【.NET 6】RabbitMQ延迟消费指南
- 小米12系列哪个性价比高-小米12系列哪个值得买
- vivoT1版怎么样_vivoT1版优缺点