Для чего нужен UnmanagedMemoryStream?
Может кто-нибудь сказать мне, для чего используется класс UnmanagedMemoryStream
?
Я не могу понять, как и когда этот класс может быть полезен?
Ответы
Ответ 1
Использование UnmanagedMemoryStream позволяет вам считывать неуправляемый поток без копирования всего в управляемую кучу, поэтому он менее интенсивно запоминается при работе с неуправляемыми потоками. Это также позволяет обойти ограничения памяти, если вы имеете дело с большим количеством данных. Вот короткая статья о UnmanagedMemoryStream.
Изменить: обратите внимание, что с MemoryStream существует ограничение 2 ГБ, поэтому вы должны использовать UnmanagedMemoryStream, если вы превысите это ограничение.
Ответ 2
UnmanagedMemoryStream
позволяет вам получить доступ к памяти, которая не была распределена с помощью среды Common Language Runtime, что полезно, главным образом, если вы хотите, чтобы память памяти была выделена неуправляемым кодом через интерфейс Stream
(например, потому что у вас уже есть код, который работает на потоках).
Конечно, вам нечего отделять неуправляемую память от С# с помощью класса Marshal
и обертывания, что в UnmanagedMemoryStream
, но это просто усложняет жизнь, поскольку вы могли бы использовать MemoryStream
вместо этого, и действительно, маловероятно, что при условии ручного управления памятью, которая поддерживает поток, будет предлагаться любая польза.