MemoryStream против массива байтов - PullRequest
8 голосов
/ 12 июня 2009

При использовании MemoryStream я часто копирую (следовательно, дублирую) данные во временный массив байтов.

Я думаю, что это немного пустая трата ресурсов, потому что MemoryStream не позволяет вам напрямую обращаться к базовому байтовому массиву.

В этом случае каково реальное преимущество MemoryStream? Я где-то читал, что он действует как файл с отображением в памяти. Данные доставляются с диска только при доступе и занимают меньше памяти.

Это правда? Я так не думаю. Может, дело в FileStream?

Спасибо за разъяснения.

Ответы [ 2 ]

4 голосов
/ 12 июня 2009

Для меня главное преимущество потока памяти в том, что он динамически увеличивается и оптимизирован для этого. - это боль в том, что приходится копировать его и дублировать память, но если вы используете его в первую очередь, это создание буфера для передачи в конце процесса, этот недостаток несколько амортизируется.

Я должен добавить, что в отличие от FileStream, MemoryStreams намного, намного быстрее. Они более ограничены по размеру, чем FileStreams, потому что у вас обычно намного больше дискового пространства, чем RAM. Таким образом, вы должны решить, нужна ли вам скорость или пространство.

3 голосов
/ 12 июня 2009

Вы можете получить базовый байтовый буфер, используя функцию getBuffer (но только если вы создали MemoryStream из предоставленного вами байтового массива, что полезно, если вы хотите иметь возможность напрямую манипулировать буфером )

Единственное преимущество использования MemoryStream - это если вы используете API, основанный на потоках, или если вам нужен байтовый буфер для динамического роста.

...