Как использовать потоки в .Net для распаковки данных без дублирования данныхC#

Место общения программистов C#
Ответить
Anonymous
 Как использовать потоки в .Net для распаковки данных без дублирования данных

Сообщение Anonymous »

У меня есть этот унаследованный код:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»