Почему поток памяти C # резервирует столько памяти?

Наше программное обеспечение распаковывает определенные байтовые данные черезGZipStream, который читает данные изMemoryStream, Эти данные распаковываются в блоки по 4 КБ и записываются в другойMemoryStream.

Мы поняли, что память, выделяемая процессом, намного выше, чем фактические распакованные данные.

Пример: сжатый байтовый массив с 2425 536 байтами распаковывается до 23 050 718 байтов. Профилировщик памяти, который мы используем, показывает, что методMemoryStream.set_Capacity(Int32 value) выделено 67 104 936 байт. Это коэффициент 2,9 между зарезервированной и фактически записанной памятью.

Замечания:MemoryStream.set_Capacity вызывается изMemoryStream.EnsureCapacity который сам по себе вызывается изMemoryStream.Write в нашей функции.

ПочемуMemoryStream зарезервировать столько емкости, даже если он добавляет только блоки по 4 КБ?

Вот фрагмент кода, который распаковывает данные:

private byte[] Decompress(byte[] data)
{
    using (MemoryStream compressedStream = new MemoryStream(data))
    using (GZipStream zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
    using (MemoryStream resultStream = new MemoryStream())
    {
        byte[] buffer = new byte[4096];
        int iCount = 0;

        while ((iCount = zipStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            resultStream.Write(buffer, 0, iCount);
        }
        return resultStream.ToArray();
    }
}

Примечание. Если необходимо, это конфигурация системы:

Windows XP 32bit,.NET 3.5Скомпилировано с Visual Studio 2008

Ответы на вопрос(4)

Ваш ответ на вопрос