赞
踩
.Net8这个版本,比之.Net7改动了非常多。本篇来看下它其中的一些类型性能的改动,官方推荐的旨在提高应用性能的新类型。
1.System.Collections.Frozen
命名空间包括集合类型 FrozenDictionary<TKey,TValue> 和 FrozenSet。创建集合后,这些类型不允许对键和值进行任何更改。此要求可实现更快的读取操作(例如,TryGetValue())。对于在首次使用时填充,然后在长期服务期间保留的集合,这些类型特别有用,例如:
- private static readonly FrozenDictionary<string, bool> s_configurationData =
- LoadConfigurationData().ToFrozenDictionary(optimizeForReads: true);
- // ...
- if (s_configurationData.TryGetValue(key, out bool setting) && setting)
- {
- Process();
- }
2.System.Buffers.IndexOfAnyValues
类型旨在传递给在传递的集合中查找任何值的第一个匹配项的方法。例如,String.IndexOfAny(Char[]) 在调用它的 string 中查找指定数组中任何字符的第一个匹配项。NET 8 添加了新的方法重载,例如接受新类型实例的 String.IndexOfAny 和 MemoryExtensions.IndexOfAny。创建 System.Buffers.IndexOfAnyValues 的实例时,将在那时派生优化后续搜索所需的所有数据,这意味着工作是预先完成的。
3.System.Text.CompositeFormat
类型可用于优化编译时未知的格式字符串(例如,格式字符串是从资源文件加载的)。前面会花费一些额外的时间来完成诸如分析字符串之类的工作,但这可以节省每次使用时完成的工作。
4.System.Buffers.IndexOfAnyValues
类型旨在传递给在传递的集合中查找任何值的第一个匹配项的方法。例如,String.IndexOfAny(Char[]) 在调用它的 string 中查找指定数组中任何字符的第一个匹配项。NET 8 添加了新的方法重载,例如接受新类型实例的 String.IndexOfAny 和 MemoryExtensions.IndexOfAny。创建 System.Buffers.IndexOfAnyValues 的实例时,将在那时派生优化后续搜索所需的所有数据,这意味着工作是预先完成的。
5.System.Text.CompositeFormat
类型可用于优化编译时未知的格式字符串(例如,格式字符串是从资源文件加载的)。前面会花费一些额外的时间来完成诸如分析字符串之类的工作,但这可以节省每次使用时完成的工作。
- private static readonly CompositeFormat s_rangeMessage = CompositeFormat.Parse(LoadRangeMessageResource());
- // ...
- static string GetMessage(int min, int max) =>
- string.Format(CultureInfo.InvariantCulture, s_rangeMessage, min, max);
6.System.Numerics和System.Runtime.Intrinsics
System.Numerics和System.Runtime.Intrinsics名空间的改进。Vector256、Matrix3x2和Matrix4x4改进了.NET 8上的硬件加速.例如,Vector256 在可能的情况下已重新实现2xVector128。硬件内部函数现在使用 ConstExpected 属性进行批注。这可确保用户知道基础硬件何时需要常量,以及非常量值何时可能会意外损害性能。
结尾
作者:江湖评谈
参考:
https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。