Кратко въведение
Този блог основно сравнява сериализацията и десериализацията на Xml, Json, Hessian и Protocol Buffers, като оставя настрана основните концепции за Xml и Json. Hessian: Hessian е лек отдалечен onhttp инструмент, който предоставя 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, най-добрият е Protocol Buffers, но когато е в рамките на 10000 пъти, Hessian е по-добър от протоколните буфери. Няма голяма разлика в рамките на 10 000 десериализации, но при 10 000 пъти вече виждаме, че Hessian е по-времеемък, а при 100 000 пъти Hessian директно надвишава XML, което ме кара винаги да мисля, че има проблем с моя код и най-добрата производителност все още са Protocol Buffers. Сериализираната дължина на байт е разбираемо най-дългата в Xml, защото файлът съдържа много крайни тагове (),</Name> а Protocol Buffers все още е най-добрият.
Въз основа на горната графика можем почти бързо да заключим, че Protocol Buffers е най-добрият, но мисля, че все пак трябва да го оценим изчерпателно от следните аспекти: 1. Четимост: Xml и Json са текстови след сериализация, а четимостта е много добра, например, ако има грешка по средата, лесно можем да видим обменените данни и дори да симулираме данните за тест; И Hessian, и протоколни буфери са двоични и съдържанието остава нечетимо след сериализация, което има определено влияние върху отстраняването на проблеми в системата. 2. Универсалност: XML и JSON вече са стари формати за обмен на данни и това са двата формата за обмен на данни между общи системи. И хесенските, и протоколните буфери са сравнително непопулярни и се използват по-рядко. 3. Удобство: Hessian всъщност е пълна RPC рамка, дефинирай интерфейса на сървърната страна и имплементирай интерфейса, копираш интерфейса към клиента. След малко кодиране можем да извикаме сървърната страна като локален метод, който не е наличен в другите три инструмента, и производителността не е лоша.
|