Возможно, вы столкнулись с той же проблемой, с которой я столкнулся, когда я задал этот вопрос для SO.
В моем случае проблема заключалась в том, что MemoryStream
не высвобождает внутреннее byte[]
даже при вызове Dispose
на нем.byte[]
не освобождается до тех пор, пока MemoryStream
не выйдет из области видимости и не будет собран GC.
В этом блоге подробно описывается причина проблемы, а также рабочее решение. Это помогло мне, и я подозреваю, что вы столкнулись с той же проблемой.По сути, он оборачивает базовый MemoryStream
в тип, который реализует тот же интерфейс, но при вызове Dispose()
устанавливает для ссылки на поток значение null.Поскольку никакие другие объекты не должны иметь оперативную ссылку на внутренний поток, это позволяет ГХ подключиться и очистить его.
Кроме того, эта проблема усугубляется тем фактом, что внутренний byte[]
, вероятно, будет выделенв куче больших объектов, что приводит к фрагментации после нескольких выделений.