内联数组是一种大小固定的 struct
类型数组。给 runtime 团队和库作者用的,适合需要性能的地方,比如高性能计算和嵌入式系统。
虽然以前就已经可以用 stackalloc
storage 或者指针来操作内存块了,但要用它就必须给程序集启用不安全的代码。从 C# 12 开始,可以用内联数组安全地操作内存缓冲区了。使用内联数组还可以避免函数调用和创建堆栈帧的开销,从而提高应用程序的性能。
声明的方式:
[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
private int _element0;
}
内联数组是具有以下特征的 struct
:
- 它包含单个字段。
- 结构未指定显式布局。
此外,编译器还会验证 System.Runtime.CompilerServices.InlineArrayAttribute
属性:
- 必须大于零 (
> 0
)。 - 目标类型必须是结构。
内联数组的用法与其他数组没差:
var buffer = new Buffer();
for (int i = 0; i < 10; i++)
{
buffer[i] = i;
}
foreach (var i in buffer)
{
Console.WriteLine(i);
}
在大多数情况下,可以像访问数组一样访问内联数组,以读取和写入值。此外,还可以使用 范围和索引运算符。
对单个字段的类型有最低限制。 它不能是指针类型,但可以是任何引用类型或任何值类型。 几乎可以将内联数组与任何 C# 数据结构一起使用。
Find out more about inline arrays in this article.