Краткое введение
В этом блоге в основном сравниваются характеристики сериализации и десериализации Xml, Json, Hessian и протокольных буферов, оставляя в стороне базовые концепции Xml и Json. Hessian: Hessian — это лёгкий инструмент для удаленного подключения на HTTP, который обеспечивает функционал RMI с использованием бинарного протокола RPC и встроенных возможностей сериализации. Протокольные буферы: формат для обмена данными от Google, который не зависит от языка и является бинарным форматом, значительно быстрее, чем использование xml для обмена данными, и может использоваться для передачи данных между распределёнными приложениями или обмена данными в гетерогенных средах. Как эффективный и совместимый формат бинарной передачи данных, он может использоваться во многих областях, таких как сетевая передача, конфигурационные файлы, хранение данных и т.д. Google предоставляет реализации на Java, C++, Python, а теперь существуют реализации таких языков, как C#, в Интернете.
Сериализация и десериализация
XML: Используйте XmlSerializer, который идёт в комплекте с .Net. Json: Он использует ServiceStack.Text, который производительнее Newtonsoft.Json, но самый быстрый должен быть fastJSON.net. Hessian: Использование библиотеки HessianCSharp, скачано с nuget. Буферы протоколов: Использование protobuf-net, скачано с nuget. Ниже приведены объекты, используемые в тесте.
Процессор i7HQ 2.6HZ, использовавшийся в тестовой машине. Вот результаты теста Сериализация
Десериализация
Длина байта после сериализации
Давайте сначала поговорим о сериализации: здесь она тестируется с 100, 1000, 10000 и 100000 соответственно, ордината — это время завершения, единица — миллисекунды. Видно, что при тестировании в течение 10000 раз расход времени при 4 видах сериализации очень мал, все в пределах 200 миллисекунд, после 10000–100000 раз все начинают расти, хуже всего — XML, лучший — буферы протокола, но когда это в пределах 10000 раз, Гессенский лучше протокольных буферов. В 10 000 десериализаций разницы небольшой, но при 10 000 раз видно, что гессенский требует больше времени, а при 100 000 случаях гессенский напрямую превышает XML, что заставляет меня постоянно думать, что проблема в моём коде, и лучшая производительность — это буферы протокола. Длина сериализованного байта вполне понятно самая длинная в XML, поскольку файл содержит много завершающих тегов (),</Name> а Protocol Buffers остаётся лучшим.
Основываясь на приведённом выше графике, мы почти быстро можем сделать вывод, что Protocol Buffers — лучший, но, на мой взгляд, нам всё равно нужно комплексно оценить их с точки зрения следующих аспектов: 1. Читаемость: Xml и Json оба являются текстом после сериализации, и читаемость очень хороша, например, если происходит ошибка в середине, мы можем легко просматривать обмениваемые данные и даже смоделировать их для тестирования; И гессенский, и протокольный буферы являются бинарными, и содержимое становится нечитаемым после сериализации, что определённо влияет на устранение неполадок системы. 2. Универсальность: XML и JSON уже являются устаревшими форматами обмена данными, и это два формата для обмена данными между общими системами. И гессенский, и протокольный буферы относительно непопулярны и используются реже. 3. Удобство: Hessian — это на самом деле полноценный фреймворк RPC: определить интерфейс на серверной стороне и реализовать интерфейс, скопировать интерфейс на клиент. После небольшого количества кодирования мы можем вызвать серверную сторону, как локальный метод, который недоступен в остальных трёх инструментах, и производительность неплохая.
|