0

メモリに適しているのはどれですか? メモリ消費量が少ないのは?

byte[] Pic = (byte[])re.GetValue(4);
MemoryStream MS = new MemoryStream();
MS.Write(Pic, 0, Pic.Length);
pictureBox1.BackgroundImage = Image.FromStream(MS);

また

pictureBox1.BackgroundImage = Image.FromStream(new MemoryStream((byte[])re.GetValue(4), true));
4

1 に答える 1

2

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);
}
于 2012-07-24T14:44:14.193 に答える