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