Таким образом, сценарий таков: у меня есть файлы размером 2-3 ГБ с двоичными сериализованными объектами, у меня также есть индексный файл, который содержит идентификатор каждого объекта и их смещение в файле.
Мне нужно написать метод, который с помощью набора идентификаторов десериализует их в память.Производительность - это самый важный критерий, а сохранение разумных требований к памяти - второе.
Использование MemoryMappedFile кажется правильным, однако я немного не уверен в том, как обращаться с большим файлом.Я не могу создать MemoryMappedViewAccessor для всего файла, так как он очень большой.Могу ли я одновременно открыть несколько MemoryMappedViewAccessor из разных сегментов, не оказывая слишком большого влияния на память, в таком случае, насколько большими должны быть эти сегменты?
Представления могут некоторое время сохраняться в памяти, если к данным обращаются много, а затем удаляютиз
Возможно, наивным методом было бы упорядочить объекты, выбираемые по смещению, и просто вызвать CreateViewAccessor для каждого смещения с небольшим буфером.Другой вариант - попытаться выяснить наименьшее количество различных необходимых MemoryMappedViewAccessor и их размер ... но я не уверен в затратах на создание CreateViewAccessor и в том, сколько места вы можете безопасно получить за один раз.Я могу провести некоторое тестирование, но если у кого-то есть идея получше ...:)
Думаю, можно пойти другим путем, разделив большой файл данных на несколько, но я не уверен, что это принесет пользуслучай ...