は(ファクトリメソッドで使用される)は、以下の方法を考えてみましょう:マネージコードでサブセットbyte []配列をマーシャリングするにはどうすればよいですか?
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);
}
コードの最後の2行は無駄な私を打ちます。より多くのメモリを割り当て、メモリから値を取り込むことは愚かなようです。アンマネージコードで
、このようなものが可能です:
m_bytes = (rawBytes + (startIndex + Packet.HeaderSize));
(構文は、おそらくオフになっているので、私は、コンパイラによってそれを実行しませんでしたが、あなたはそれがポインタ操作の問題だ見ることができます。)
APIが本当に短い[]配列だったbyte []配列を返すと、先日同様の問題が発生しました。
これらのタイプの配列置換は、マネージコードを使用する単なるコストですか、私が見逃している新しい考え方ですか?
ありがとうございます。