упорядочивает дампы быстрее, cPickle загружается быстрее

Я реализую программу, которая должна сериализовать и десериализовать большие объекты, поэтому я проводил несколько тестов с pickle , cPickle и маршал модулей, чтобы выбрать лучший модуль. Попутно я обнаружил кое-что очень интересное:

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

Это результат моего теста:

DUMPING a list of length 7340032
----------------------------------------------------------------------
pickle => 14.675 seconds
length of pickle serialized string: 31457430

cPickle => 2.619 seconds
length of cPickle serialized string: 31457457

marshal => 0.991 seconds
length of marshal serialized string: 117440540

LOADING a list of length: 7340032
----------------------------------------------------------------------
pickle => 13.768 seconds
(same length?) 7340032 == 7340032

cPickle => 2.038 seconds
(same length?) 7340032 == 7340032

marshal => 6.378 seconds
(same length?) 7340032 == 7340032

Итак, из этих результатов мы видим, что marshal был чрезвычайно быстрым в дампинге части теста:

В 14,8 раза быстрее, чем pickle , и в 2,6 раза быстрее, чем cPickle .

Но, к моему большому удивлению, marshal был намного медленнее, чем cPickle в части загрузки :

в 2,2 раза быстрее, чем ] pickle , но в 3,1 раза медленнее, чем cPickle .

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

Ubuntu System Monitor

Я предполагаю, почему загрузка с помощью маршала так slow как-то связан с длиной его сериализованной строки (намного длиннее, чем pickle и cPickle ).

  • Почему marshal выгружает быстрее и загружается медленнее?
  • Почему marshal сериализованная строка такая длинная?
  • Почему marshal загружается так неэффективно в ОЗУ?
  • Есть ли способ улучшить производительность загрузки marshal ?
  • Есть ли способ объединить marshal fast dumping с cPickle ] быстрая загрузка?
18
задан juliomalegria 15 December 2011 в 01:43
поделиться