Реализация Stream, которая оборачивает другой поток - PullRequest
2 голосов
/ 31 января 2011

Ну, я думаю, мне придется сделать трилогию, связанную с моим вопросом, найденную в Исключение нехватки памяти при загрузке изображений

Итак, вторая часть.

Согласно ответам - комментариям к посту, упомянутому выше, рано или поздно на любом компьютере не хватит памяти при выполнении моего кода. (

Но благодаря Google я нашел способ применения Реализация WrappingStream. где, по словам автора

BitmapImage сохраняет ссылку на исходный поток (предположительно, чтобы Вы можете прочитать свойство StreamSource в любое время), поэтому он сохраняет Объект MemoryStream жив. К сожалению, хотя MemoryStream.Dispose был вызван, он не освобождает байтовый массив, который поток памяти оборачивается. Итак, в этом регистр, битмап ссылается на поток, который ссылается на буфер, который может занимать много места на куча больших объектов. Обратите внимание, что там не настоящая утечка памяти; когда там больше нет ссылок на растровое изображение, все эти объекты будут (в конце концов) мусор собрал. Но так как растровое изображение уже сделал свою личную копию изображения (для рендеринга), кажется довольно расточительно иметь ненужная оригинальная копия растровое изображение все еще находится в памяти.

Итак, вот пара вопросов, которые у меня есть. (И перед тем, как начать голосование, помните, что я новичок!)

Могу ли я использовать класс WrappingStream, чтобы избежать ошибок нехватки памяти? Если первое верно, как я могу принять его и заставить его работать с моим примером?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 декабря 2015

System.Net.Http.Formatting.Internal.DelegatingStream должен отвечать всем требованиям. Жаль, что Microsoft не сделала этот класс общедоступным в рамках.

https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Net.Http.Formatting/Internal/DelegatingStream.cs

1 голос
/ 01 февраля 2011

Могу ли я использовать класс WrappingStream, чтобы избежать ошибок нехватки памяти?

Нет, он нацелен на другую проблему.

...