Я пытался определить, какова истинная стоимость использования фиксированного оператора в С# для управляемых небезопасных структур, содержащих фиксированные массивы. Обратите внимание: я не имею в виду неуправляемые структуры.
В частности, есть ли какие-либо причины, чтобы избежать шаблона, показанного ниже в классе "MultipleFixed"? Является ли стоимость простой фиксации данных без нуля, около нуля (== стоимость аналогична настройке и очистке одного флага при входе/выходе из фиксированной области), или это достаточно важно, чтобы избежать, когда это возможно?
Очевидно, что эти классы придуманы, чтобы помочь объяснить вопрос. Это для высокопроизводительной структуры данных в XNA-игре, где производительность чтения и записи этих данных имеет решающее значение, поэтому, если мне нужно исправить массив и передать его повсюду, я сделаю это, но если вообще не будет никакой разницы 'd предпочитают держать fixed() локальным в методах, чтобы помочь сохранить сигнатуры функций немного более переносимыми на платформы, которые не поддерживают небезопасный код. (Да, его дополнительный код ворчания, но что бы он ни делал.)
unsafe struct ByteArray
{
public fixed byte Data[1024];
}
class MultipleFixed
{
unsafe void SetValue(ref ByteArray bytes, int index, byte value)
{
fixed(byte* data = bytes.Data)
{
data[index] = value;
}
}
unsafe bool Validate(ref ByteArray bytes, int index, byte expectedValue)
{
fixed(byte* data = bytes.Data)
{
return data[index] == expectedValue;
}
}
void Test(ref ByteArray bytes)
{
SetValue(ref bytes, 0, 1);
Validate(ref bytes, 0, 1);
}
}
class SingleFixed
{
unsafe void SetValue(byte* data, int index, byte value)
{
data[index] = value;
}
unsafe bool Validate(byte* data, int index, byte expectedValue)
{
return data[index] == expectedValue;
}
unsafe void Test(ref ByteArray bytes)
{
fixed(byte* data = bytes.Data)
{
SetValue(data, 0, 1);
Validate(data, 0, 1);
}
}
}
Кроме того, я искал похожие вопросы, и ближайший я нашел этот, но этот вопрос отличается тем, что он касается только чистого управляемого кода и конкретного затраты на использование фиксированного в этом контексте.
Спасибо за любую информацию!