2009-06-29 4 views
8

Должен ли я предпочитать двоичную сериализацию по сравнению с сериализацией ascii/text, если производительность является проблемой?Повысить производительность сериализации: текст по сравнению с бинарным форматом

Кто-нибудь проверил его на большом количестве данных?

+0

Интересная тема. Прочитайте это: http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization –

ответ

13

Я использовал boost.serialization для хранения матриц и векторов, представляющей таблицу поиска и некоторых мета-данные (строки) с размером памяти около 200 Мбайт. IIRC для загрузки с диска в память потребовалось 3 минуты для текстового архива против 4 секунд, используя двоичный архив на WinXP.

+0

3 минуты звучит ... необъяснимо медленно. Это не POD-типы :) – sehe

1

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

Чтобы изменить формат, использование архива потоков

boost::archive::binary_oarchive 
boost::archive::binary_iarchive 

вместо

boost::archive::text_oarchive 
boost::archive::text_iarchive 

код для загрузки (двоичный) архив выглядит следующим образом:

std::ifstream ifs("filename", std::ios::binary); 
boost::archive::binary_iarchive input_archive(ifs); 
Class* p_object; 
input_archive >> p_object; 

файлов и walltimes для оптимизированной сборки gcc приведенного выше фрагмента кода:

  • ASCII: 820MB (100%), 32,2 секунды (100%).
  • двоичный: 620MB (76%), 14.7 секунд (46%).

Это твердотельный накопитель без сжатия потока.

Таким образом, выигрыш в скорости больше, чем размер файла, и вы получите дополнительный бонус, используя двоичный код.

 Смежные вопросы

  • Нет связанных вопросов^_^