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

StackOverflow https://stackoverflow.com/questions/394588

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Неа.

Это во многом зависит от того, какие данные находятся внутри самого 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>

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

Другие советы

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

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

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

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

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

Ознакомьтесь с этой статьей: http://www.nablasoft.com/alkampfer/index.php/2008/10/31/binary-versus-xml-serialization-size/

Просто отметим, что производительность — это не единственный показатель, на который вы можете обратить внимание.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top