【译】ASP.NET Core 6 中的性能改进 (4)

所以写起来肯定更容易,但它的表现如何呢?分别在 .NET 5 和 .NET 6 的 blazorserver 模板中运行这些代码片段,在 Release 配置下,我们看到 .NET 6 在 byte[] 互操作方面提供了 78% 的性能提升!

—————– .NET 6 (ms) .NET 5 (ms) Improvement
Total Time   5273   24463   78%  

此外,框架内利用了这种字节数组互操作支持,以实现 JavaScript 和 .NET 之间的双向流式互操作。用户现在可以传输任意二进制数据。有关,。

输入文件

使用上面提到的 Blazor Streaming Interop,我们现在支持通过 InputFile 组件上传大文件(以前上传限制为 ~2GB)。由于原生字节 [] 流而不是通过 Base64 编码,该组件还具有显着的速度改进。例如,与 .NET 5 相比,上传 100 MB 文件的速度提高了 77%。

.NET 6 (ms) .NET 5 (ms) Percentage
2591   10504   75%  
2607   11764   78%  
2632   11821   78%  
  Average:   77%  

请注意,流式互操作支持还可以有效下载(大)文件,有关更多详细信息,请参阅文档。

InputFile 组件已升级为通过 dotnet/aspnetcore#33900 使用流式传输。

大杂烩

来自@benaadams 的 dotnet/aspnetcore#30320 对我们的 Typescript 库进行了现代化改造并对其进行了优化,因此网站加载速度更快。 signalr.min.js 文件从 36.8 kB 压缩和 132 kB 未压缩变为 16.1 kB 压缩和 42.2 kB 未压缩。 blazor.server.js 文件压缩后为 86.7 kB,未压缩时为 276 kB,压缩后为 43.9 kB,未压缩时为 130 kB。

@benaadams 的 dotnet/aspnetcore#31322 在从连接功能集合中获取常用功能时删除了一些不必要的强制转换。这在访问集合中的常见特征时提供了约 50% 的改进。不幸的是,实际上不可能在基准测试中看到性能改进,因为它需要一堆内部类型,所以我将在此处包含来自 PR 的数字,如果您有兴趣运行它们,PR 包括可以运行的基准反对内部代码。

Method Mean Op/s Diff
Get*   8.507 ns   117,554,189.6   +50.0%  
Get*   9.034 ns   110,689,963.7    
Get*   9.466 ns   105,636,431.7   +58.7%  
Get*   10.007 ns   99,927,927.4   +50.0%  
Get*   10.564 ns   94,656,794.2   +44.7%  

dotnet/aspnetcore#31519 也来自@benaadams,将默认接口方法添加到 IHeaderDictionary 类型,用于通过以标头名称命名的属性访问公共标头。访问标题字典时不再输入错误的常见标题!对于这篇博文来说更有趣的是,此更改允许服务器实现返回自定义标头字典,以更优化地实现这些新接口方法。例如,不是在内部字典中查询需要散列键并查找条目的标头值,而是服务器可能将标头值直接存储在字段中并可以直接返回该字段。在某些情况下,在获取或设置标头值时,此更改可带来高达 480% 的改进。再一次,为了正确地对这个更改进行基准测试,以显示它需要使用内部类型进行设置所需的改进,因此我将包括来自 PR 的数字,并且对于那些有兴趣尝试它的人,PR 包含在内部代码上运行的基准。

Method Branch Type Mean Op/s Delta
GetHeaders   before   Plaintext   25.793 ns   38,770,569.6    
GetHeaders   after   Plaintext   12.775 ns   78,279,480.0   +101.9%  
GetHeaders   before   Common   121.355 ns   8,240,299.3    
GetHeaders   after   Common   37.598 ns   26,597,474.6   +222.8%  
GetHeaders   before   Unknown   366.456 ns   2,728,840.7    
GetHeaders   after   Unknown   223.472 ns   4,474,824.0   +64.0%  
SetHeaders   before   Plaintext   49.324 ns   20,273,931.8    
SetHeaders   after   Plaintext   34.996 ns   28,574,778.8   +40.9%  
SetHeaders   before   Common   635.060 ns   1,574,654.3    
SetHeaders   after   Common   108.041 ns   9,255,723.7   +487.7%  
SetHeaders   before   Unknown   1,439.945 ns   694,470.8    
SetHeaders   after   Unknown   517.067 ns   1,933,985.7   +178.4%  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzfdg.html