2つ目はより高速に動作し、使用するメモリが少なくなります。コンストラクターから初期化する場合MemoryStream
、バイトは単に内部バッファーに割り当てられます(ストリームはサイズ変更できません)。
public MemoryStream(byte[] buffer, bool writable)
{
_buffer = buffer;
_writable = writable;
_exposable = false;
}
パラメーターなしのコンストラクターを使用する場合、ストリームは初期容量でサイズ変更可能になります0
。書き込み中に、新しいバイト配列が作成され、値が内部バッファにコピーされます。
public MemoryStream()
{
_buffer = new byte[0];
_writable = true;
_exposable = true;
}
public override void Write(byte[] buffer, int offset, int count)
{
// EnsureCapacity
byte[] dst = new byte[_position + count];
Buffer.InternalBlockCopy(_buffer, 0, dst, 0, _length);
_buffer = dst;
// Copy
Buffer.InternalBlockCopy(buffer, offset, _buffer, _position, count);
}