Для чего нужен UnmanagedMemoryStream? - PullRequest
16 голосов
/ 05 декабря 2011

Может кто-нибудь сказать мне, для чего используется класс UnmanagedMemoryStream?

Я не могу понять, как и когда этот класс может быть полезен?

Ответы [ 2 ]

11 голосов
/ 05 декабря 2011

Использование UnmanagedMemoryStream позволяет вам читать неуправляемый поток, не копируя все сначала в управляемую кучу, поэтому он требует меньше памяти при работе с неуправляемыми потоками.Это также позволяет обойти ограничения памяти, если вы имеете дело с большим количеством данных.Вот небольшая статья о UnmanagedMemoryStream .

Редактировать: обратите внимание, что с MemoryStream существует ограничение в 2 ГБ, поэтому вы должны использовать UnmanagedMemoryStream, если вы превысите это ограничение.

5 голосов
/ 05 декабря 2011

UnmanagedMemoryStream позволяет получить доступ к памяти, которая не была выделена средой общего языка, что полезно, главным образом, если вы хотите обрабатывать память, выделенную неуправляемым кодом, через интерфейс Stream (например, потому что у вас уже есть код, которыйработает на потоках).

Конечно, ничто не мешает вам выделять неуправляемую память из C # через класс Marshal и помещать ее в UnmanagedMemoryStream, но это просто делает жизньболее сложным, поскольку вы могли бы использовать MemoryStream вместо этого, и это очень, очень маловероятно, если ручное управление памятью, поддерживающей поток, даст какую-то выгоду.

...