.Net 10中简化内敛数组
起因
在.Net 8增加内敛数组,在.Net 10简化部分使用内敛数组的场景. 在BCL中内置了常用内敛数组的类型,在使用的时候,就不需要先定义一个类型. 具体的issue:可以看在.Net 10内置的内敛数组:

测试代码
using System.Runtime.CompilerServices;
using BenchmarkDotNet.Attributes;
namespace CSharpBenchmarks.ArrayTest
{
[MemoryDiagnoser]
[DisassemblyDiagnoser(printSource: true)]
public class InlineArray2Test
{
[Params(10, 100, 1000)]
public int Count { get; set; }
[Benchmark(Baseline = true)]
public void TestArray1()
{
for (int i = 0; i < Count; i++)
{
Test1 arr = new(); //内联数组 .
for (int j = 0; j < Test1.Length; j++)
{
arr[j] = j;
}
}
}
[Benchmark]
public void TestArray2()
{
for (int i = 0; i < Count; i++)
{
InlineArray10<int> arr = new(); //.Net 10 内置数组长度2-16的泛型内敛数组
for (int j = 0; j < 10; j++)
{
arr[j] = j;
}
}
}
}
#if NET8_0_OR_GREATER
[InlineArray(Length)] //内联数组,并指定数组的长度,这个用法还是有点怪怪的
public struct Test1
{
public const int Length = 10;
public int x;
}
#endif
}
性能基准测试结果:
通过BenchmarkDotNet对自定义内敛数组和内置的内敛数组性能测试,发现使用频率低的时候,内置比自定义有2%和3%的差异.在较高频率时,内置内敛数组比自定义内敛数组的性能下降8%.其实差异不是很大.
秋风
2025-04-26