Рассмотрим следующий метод (используется в фабричный метод):Как сделать маркер из массива Subset [] в управляемом коде?
private Packet(byte[] rawBytes, int startIndex)
{
m_packetId = BitConverter.ToUInt32(rawBytes, startIndex);
m_dataLength = BitConverter.ToUInt16(rawBytes, startIndex + 4);
if (this.Type != PacketType.Data)
return;
m_bytes = new byte[m_dataLength];
rawBytes.CopyTo(m_bytes, startIndex + Packet.HeaderSize);
}
Последние две строки кода ударить меня расточительным. Выделение большего объема памяти и заполнение ее значениями из памяти кажутся глупыми.
С неуправляемым кодом, что-то, как это возможно:
m_bytes = (rawBytes + (startIndex + Packet.HeaderSize));
(я не запустить его через компилятор так синтаксис, вероятно, выключен, но вы можете видеть, что это всего лишь вопрос манипуляции указателя.)
Я столкнулся с аналогичной проблемой на днях, когда API возвратил массив byte [], который был действительно коротким [] массивом.
Являются ли эти типы перестановок массива просто стоимостью использования управляемого кода или есть новая школа мышления, которую я просто пропустил?
Заранее спасибо.