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