所以写起来肯定更容易,但它的表现如何呢?分别在 .NET 5 和 .NET 6 的 blazorserver 模板中运行这些代码片段,在 Release 配置下,我们看到 .NET 6 在 byte[] 互操作方面提供了 78% 的性能提升!
—————– .NET 6 (ms) .NET 5 (ms) ImprovementTotal Time 5273 24463 78%
此外,框架内利用了这种字节数组互操作支持,以实现 JavaScript 和 .NET 之间的双向流式互操作。用户现在可以传输任意二进制数据。有关,。
输入文件使用上面提到的 Blazor Streaming Interop,我们现在支持通过 InputFile 组件上传大文件(以前上传限制为 ~2GB)。由于原生字节 [] 流而不是通过 Base64 编码,该组件还具有显着的速度改进。例如,与 .NET 5 相比,上传 100 MB 文件的速度提高了 77%。
.NET 6 (ms) .NET 5 (ms) Percentage2591 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 DiffGet* 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 DeltaGetHeaders 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%