У меня есть фрагмент кода, в котором я перебираю огромный трехмерный массив с двумя циклами for. Теперь у меня проблемы с производительностью, это слишком медленно. Что я могу сделать?
Я где-то читал, что неуправляемый код может решить проблему. Правильно ли я понял: неуправляемый код работает вне движка .net?
Ну, я поставил небезопасный блок вокруг моих итераций массива, но это не помогло. Я думаю, это потому, что я все еще использую управляемый массив. Как я могу скопировать мой массив в небезопасный массив или получить небезопасный указатель на этот массив? Я попытался исправить (см. Код ниже), но я получаю ошибки компилятора.
byte[, ,] data = original.Data;
unsafe
{
fixed (byte*** dataPtr = (byte***)data) // data is of type byte[,,]
{
for (int i = original.Rows - 1; i >= 0; i--)
{
for (int j = original.Cols - 1; j >= 0; j--)
{
if (dataPtr[i,j,0] < 100)
{
dataPtr[i, j, 0] += 100;
dataPtr[i, j, 1] += 40;
dataPtr[i, j, 2] += 243;
}
else
{
dataPtr[i,j,0] = 0;
}
}
}
}
}
Как я могу использовать это фиксированное ключевое слово в трехмерном массиве и поможет ли это сделать мой код быстрее?