Производительность сериализованных объектов в C ++ - PullRequest
0 голосов
/ 24 апреля 2010

Мне интересно, есть ли быстрый способ записать STL set на диск и затем прочитать его позже.

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

Есть ли способ «сбросить» память, содержащую набор, на диск, а затем прочитать ее позже? То есть сохраняйте все в двоичном формате, избегая повторной вставки.

Делают ли это инструменты повышения сериализации?

Спасибо!

РЕДАКТИРОВАТЬ: о, я, вероятно, должен прочитать, http://www.parashift.com/c++-faq-lite/serialization.html Я буду читать это сейчас ... нет, это не очень помогает

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

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

Чтобы снова прочитать элемент, вы можете использовать «подсказки», которые позволяют вам подсказывать метод вставки, куда должен быть вставлен элемент. Это может вернуть конструкцию множества к линейной сложности вместо n log n.

2 голосов
/ 24 апреля 2010

Нет, и если вы на самом деле читаете его обратно с жесткого диска (или, возможно, из любого постоянного хранилища), узкая часть будет узким местом механической части.

Если вы помещаете контейнер в непрерывный блок памяти, в этом блоке должно быть свободное пространство, а чтение этого пространства с диска приводит к потере времени… и дискового пространства.

Это классическая преждевременная оптимизация.

Если вам действительно это нужно, Boost Interprocess имеет (относительно) удобные для сериализации контейнеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...