У меня есть этот унаследованный код:
Код: Выделить всё
private string DecompressData(byte[] data)
{
byte[] decompressedData;
using (MemoryStream ms = new MemoryStream(data))
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Decompress))
{
using (MemoryStream resultStream = new MemoryStream())
{
gzip.CopyTo(resultStream);
decompressedData = resultStream.ToArray();
}
}
}
return Encoding.UTF8.GetString(decompressedData);
}
Массив данных может достигать 1 МБ, а коэффициент сжатия может достигать 32 раз. Однако я наблюдаю большие скачки в использовании памяти (иногда около 100 МБ) при использовании этого метода. Это часть задачи контейнера, которую я пытаюсь максимально распараллелить, чтобы максимально эффективно использовать каждый контейнер, но в настоящее время наблюдаю ошибки OOM. Как я могу переписать этот код, чтобы входные данные удалялись по мере их чтения следующим потоком? Или какой другой подход я могу использовать, чтобы выполнить ту же задачу с большей эффективностью использования памяти?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... g-the-data