Я пытался определить, какова истинная стоимость использования фиксированного оператора в С# для управляемых небезопасных структур, содержащих фиксированные массивы. Обратите внимание: я не имею в виду неуправляемые структуры.
В частности, есть ли какие-либо причины, чтобы избежать шаблона, показанного ниже в классе "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); } } }
Кроме того, я искал похожие вопросы, и ближайший я нашел этот, но этот вопрос отличается тем, что он касается только чистого управляемого кода и конкретного затраты на использование фиксированного в этом контексте.
Спасибо за любую информацию!