【翻译】.NET 5中的性能改进

本文详细介绍了.NET 5相较于.NET Core 3.1的性能改进,包括垃圾收集(GC)的优化,如工作窃取、ephemeral段解压、减少锁争用等。文章通过基准测试展示了性能提升,如数组排序的加速和GC暂停时间的减少。此外,还讨论了将C++运行时代码移植到托管代码以提高性能和GC效率,以及如何撤销早期的微优化以适应变化。
摘要由CSDN通过智能技术生成

翻译】.NET 5中的性能改进
在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进。 从.NET Core 2.0到.NET Core 2.1到.NET Core 3.0的每一篇文章,发现
谈论越来越多的东西。 然而有趣的是,每次都想知道下一次是否有足够的意义的改进以保证再发表一篇文章。 .NET 5已经实现了许多性能改进,尽管直到今年秋天才计划发布最终版本,并且到那时很有可能会有更多的改进,但是还要强调一下,现在已提供的改进。 在这篇文章中,重点介绍约250个PR,这些请求为整个.NET 5的性能提升做出了巨大贡献。

安装

Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配。 因此,本文中大部分示例都是使用使用该工具编写的微基准来衡量的。首先创建了一个目录,然后使用dotnet工具对其进行了扩展:

mkdir Benchmarks
cd Benchmarks
dotnet new console

生成的Benchmarks.csproj的内容扩展为如下所示:

Exe true true net5.0;netcoreapp3.1;net48

这样,就可以针对.NET Framework 4.8,.NET Core 3.1和.NET 5执行基准测试(目前已为Preview 8安装了每晚生成的版本)。.csproj还引用Benchmark.NET NuGet软件包(其最新版本为12.1版),以便能够使用其功能,然后引用其他几个库和软件包,特别是为了支持能够在其上运行测试 .NET Framework 4.8。
然后,将生成的Program.cs文件更新到同一文件夹中,如下所示:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Running;
using System;
using System.Buffers.Text;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;

[MemoryDiagnoser]
public class Program
{
static void Main(string[] args) => BenchmarkSwitcher.FromAssemblies(new[] { typeof(Program).Assembly }).Run(args);

// BENCHMARKS GO HERE

}

对于每次测试,每个示例中显示的基准代码复制/粘贴将显示"// BENCHMARKS GO HERE"的位置。
为了运行基准测试,然后做:

dotnet run -c Release -f net48 --runtimes net48 netcoreapp31 netcore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值