Вы можете создать Span
с неуправляемой памятью.Это позволит вам Slice and Dice без разбора.
unsafe
{
Span<T> something = new Span<T>(pointerToarray, someLength);
}
Полная демонстрация
unsafe public static void Main(string[] args)
{
double[,] doubles = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 9.5f, 10, 11 },
{ 12, 13, 14.3f, 15 }
};
var length = doubles.GetLength(0) * doubles.GetLength(1);
fixed (double* p = doubles)
{
var span = new Span<double>(p, length);
var slice = span.Slice(6, 5);
foreach (var item in slice)
Console.WriteLine(item);
}
}
Вывод
7
8
9
9.5
10
Другие варианты - перераспределение наодномерный массив, скопируйте штраф и не Pass-Go
BlockCopy
- или p / invoke
memcpy
напрямую и используйте unsafe
и указатели Cast<T>
например, multiDimensionalArrayData.Cast<byte>().ToArray()
Первые 2 будут более производительными для больших массивов.