Существует ли реализация MemoryStream с открытым исходным кодом, в которой не используется непрерывная память? - PullRequest
8 голосов
/ 14 марта 2012

Как и GuyFawkes , я хотел бы использовать MemoryStream для хранения большого объема данных, но продолжаю сталкиваться с исключениями «нехватка памяти».
Ответ TomTom - это то, что я хотел бы сделать -использовать реализацию, которая не требует смежного блока - но мне интересно, есть ли уже свободная реализация, чтобы спасти меня самому писать?

Кто-нибудь знает о хорошем, бесплатном-реализация MemoryStream, которая может работать с большими потоками?

EDIT:

Решение MemoryMappedFile очень интересно, и я буду помнить его для других проектов, однако, как говорит Хенк, онослишком далеко отклоняется от абстракции, к которой стремится MemoryStream.В частности, требование известной емкости.
Данные, которые должна обрабатывать замена, в некоторых случаях будут очень большими, а в других - относительно небольшими (и мы не знаем, какими они будут, пока не станет слишком поздно;));кроме того, многие экземпляры класса будут существовать одновременно.В конечном итоге работа, необходимая для использования MemoryMappedFiles (для определения подходящего размера для каждого из них), будет эквивалентна работе по реализации решения TomTom.

Ответы [ 3 ]

3 голосов
/ 18 марта 2012

Вот моя реализация на случай, если кому-то это понадобится;Я оставлю этот вопрос открытым на некоторое время, если кто-то все же ответит чем-нибудь лучше.

http://www.codeproject.com/Articles/348590/A-replacement-for-MemoryStream

1 голос
/ 14 марта 2012

Вы можете создать MemoryMappedFile без файла, т.е. файла, который находится в системной памяти.Опция DelayAllocatePages задерживает распределение до тех пор, пока память фактически не понадобится.Вам необходимо заранее указать максимальную вместимость.Используйте метод CreateViewStream для создания потока.

0 голосов
/ 14 марта 2012

Не совсем повторная реализация MemoryStream, но подумайте, можете ли вы использовать Memory Mapped File для ваших требований.

Файлы с отображением в памяти могут решить многие классы проблем, которые могут решить большие буферы памяти, очень эффективны и поддерживаются непосредственно .NET.

...