.NET性能系列文章一:.NET7的性能改进( 二 )


.NET性能系列文章一:.NET7的性能改进

文章插图
1000629.3 ns1.00-
.NET性能系列文章一:.NET7的性能改进

文章插图
这里的性能提升并不像前面的例子那么突出,但还是非常高的!
3. Order接下来是这是新增了两个排序方法Order()OrderDescending() 。当你不想映射到IComparable 类型时,应该使用新的方法取代.NET7中旧的OrderBy()OrderByDescending()方法 。
[Params(1000)]public int Length { get; set; }private double[] arr;[GlobalSetup]public void GlobalSetup(){var random = new Random();arr = Enumerable.Range(0, Length).Select(_ => random.NextDouble()).ToArray();}[Benchmark]public double[] OrderBy() => arr.OrderBy(d => d).ToArray();#if NET7_0[Benchmark]public double[] Order() => arr.Order().ToArray();#endif方法数组长度平均值分配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
.NET性能系列文章一:.NET7的性能改进

文章插图
193.50 μs1.0310016 BWriteAllText
.NET性能系列文章一:.NET7的性能改进

文章插图
187.32 μs1.00464 BReadAllText
.NET性能系列文章一:.NET7的性能改进

文章插图
23.29 μs1.0824248 BReadAllText
.NET性能系列文章一:.NET7的性能改进

文章插图
21.53 μs1.0024248 B序列化 (System.Text.Json)【.NET性能系列文章一:.NET7的性能改进】来自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
.NET性能系列文章一:.NET7的性能改进

文章插图
135.4 ns1.04208 B3.71CachedOptions
.NET性能系列文章一:.NET7的性能改进

文章插图
145.9 ns1.12208 B3.71NoCachedOptions
.NET性能系列文章一:.NET7的性能改进

文章插图
90,069.7 ns691.897718 B137.82Default

经验总结扩展阅读