我的库中有一个名为 ProcessSubset(double[] subset){}
的函数我想分割一个更大的数组并将其传递给这个函数。但出于明显的性能原因,我不想复制内存,而且没有理由这样做。不幸的是 c# 做不到。
现在,子集只需只读。它仅用于只读数据处理。 .Net 似乎不支持这个基本功能。毕竟, double[] 只是指向内存的指针,因此显然能够以安全的方式对其进行切片,特别是如果它是只读的!
那么现在,有没有推荐的方法来使用不安全和指针来做到这一点?
存在从 Span<T>
到
ReadOnlySpan<T>
的 隐式转换。
void Main() {
var foo = new int[] { 3, 4, 5 }.AsSpan().Slice(1);
ReadOnlySpanFunc(foo); // implicit conversion
}
void ReadOnlySpanFunc(ReadOnlySpan<int> readOnlySpan) {
foreach (var element in readOnlySpan) {
Console.WriteLine(element);
}
}
// 4,5