Для чего нужен UnmanagedMemoryStream?

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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