【翻译】.NET 5中的性能改进资料
本文主要介绍【翻译】.NET 5中的性能改进资料 方法和在新技术下所面对的“挑战”,方便大家深入理解【翻译】.NET 5中的性能改进资料 过程。本文也将分享【翻译】.NET 5中的性能改进资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。
【翻译】.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的内容扩展为如下所示:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> <ServerGarbageCollection>true</ServerGarbageCollection> <TargetFrameworks>net5.0;netcoreapp3.1;net48</TargetFrameworks> </PropertyGroup> <ItemGroup> <PackageReference Include="benchmarkdotnet" Version="0.12.1" /> </ItemGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'net48' "> <PackageReference Include="System.Memory" Version="4.5.4" /> <PackageReference Include="System.Text.Json" Version="4.7.2" /> <Reference Include="System.Net.Http" /> </ItemGroup> </Project>
这样,就可以针对.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 netcoreapp50 --filter ** --join
这告诉Benchmark.NET:
- 使用.NET Framework 4.8 来建立基准。
- 针对.NET Framework 4.8,.NET Core 3.1和.NET 5分别运行基准测试。
- 在程序集中包含所有基准测试(不要过滤掉任何基准测试)。
- 将所有基准测试的输出结果合并在一起,并在运行结束时显示(而不是贯穿整个过程)。
在某些情况下,针对特定目标的API并不存在,我只是省略了命令行的这一部分。
最后,请注意以下几点:
- 从运行时和核心库的角度来看,它与几个月前发布的前身相比没有多少改进。 但是,还进行了一些改进,在某些情况下,目前已经将.NET 5的改进移植回了.NET Core 3.1,在这些改进中,这些更改被认为具有足够的影响力,可以保证可以添加到长期支持中(LTS)版本。 因此,我在这里所做的所有比较都是针对最新的.NET Core 3.1服务版本(3.1.5),而不是针对.NET Core 3.0。
- 由于比较是关于.NET 5与.NET Core 3.1的,而且.NET Core 3.1不包括mono运行时,因此不讨论对mono所做的改进,也没有专门针对“Blazor”。 因此,当指的是“runtime”时,指的是coreclr,即使从.NET 5开始,它也包含多个运行时,并且所有这些都已得到改进。
- 大多数示例都在Windows上运行,因为也希望能够与.NET Framework 4.8进行比较。 但是,除非另有说明,否则所有显示的示例均适用于Windows,Linux和macOS。
- 需要注意的是: 这里的所有测量数据都是在的台式机上进行的,测量结果可能会有所不同。微基准测试对许多因素都非常敏感,包括处理器数量、处理器架构、内存和缓存速度等等。但是,一般来说,我
【翻译】.NET 5中的性能改进资料部分资料来自网络,侵权毕设源码联系删除
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 【翻译】.NET 5中的性能改进资料