Есть ли различия в производительности между двоичной и XML-сериализацией? - PullRequest
6 голосов
/ 27 декабря 2008

с точки зрения как синтаксического анализа (сериализации, десериализации), так и отправки пакетов по сети, есть ли хорошая оценка различий в производительности между двоичной сериализацией и сериализацией XML?

Ответы [ 4 ]

15 голосов
/ 27 декабря 2008

Неа.

Это сильно зависит от того, какие данные находятся внутри самого документа XML. Если у вас много структурированных данных, накладные расходы на XML будут большими. Например, если ваши данные выглядят так:

<person>
  <name>Dave</dave>
  <ssn>000-00-0000</ssn>
  <email1>xxxxxx/email1>
</person>
...

У вас будет намного больше накладных расходов, чем если бы у вас был документ XML, который выглядит следующим образом:

<book name="bible">
 In the beginning God created the heavens and the earth. 
 Now the earth was formless and empty ... 
 And if any man shall take away from the words of the book of this prophecy, God shall take away his part out of the book of life, and out of the holy city, and from the things which are written in this book. He which testifieth these things saith, Surely I come quickly. Amen. Even so, come, Lord Jesus.
</book>

Так что это не совсем честный вопрос. Это сильно зависит от данных, которые вы намереваетесь отправить, и от того, как / если вы их сжимаете.

5 голосов
/ 27 декабря 2008

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

Однако вы можете получить лучшее из обоих: и сделать его меньше и сделать это быстрее, используя сделанную на заказ двоичную сериализацию - и вам даже не придется это делать себя; -p

protobuf-net - это .NET-реализация спецификации двоичной сериализации буферов протокола Google; он меньше, чем XmlSerializer или BinaryFormatter, полностью переносимый (не только между версиями - вы можете загрузить поток pb, например, в Java и т. д.), расширяемый и быстрый. Это также довольно всесторонне проверено, с большим количеством пользователей.

Полная разбивка по размеру и скорости, охватывающая XmlSerializer, BinaryFormatter, DataContractSerializer и protobuf-net, составляет здесь .

0 голосов
/ 27 декабря 2008

Просто указание на производительность - не единственная метрика, на которую вы можете посмотреть.

  • Простота строительства. У вас есть несколько дней / недель, чтобы построить процедуру сериализатора / десериализатора и тщательно ее протестировать, или это время лучше потратить на функции.
  • Простота использования данных. Может ли клиент использовать предварительно созданный синтаксический анализатор с открытым исходным кодом или ему нужно самим реализовать кучу (потенциально ошибочных) кода?
  • Простота отладки. Будет ли возможность просматривать данные в пути помочь отладить? Тогда двоичный формат будет иметь тенденцию запутывать любые проблемы.
  • Какова стоимость обслуживания для каждого метода?

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

0 голосов
/ 27 декабря 2008

Инстинктивно хочется сказать, что двоичный файл более эффективен, но на самом деле он зависит от сериализуемых данных.

Проверьте эту статью: http://www.nablasoft.com/alkampfer/index.php/2008/10/31/binary-versus-xml-serialization-size/

...