Самый быстрый сериализатор и десериализатор с самым низким объемом памяти в C #? - PullRequest
16 голосов
/ 09 марта 2009

В настоящее время я использую двоичный форматер (Remoting) для сериализации и десериализации объектов для отправки по моей локальной сети.

Я недавно обновился с 2.0 до .NET 3.5. 3.5 ввел какие-либо новые типы для улучшения производительности сериализации?

Я посмотрел на DataContractSerializer, но это сериализует все, что касается лежащего в основе XML права ... что должно увеличить объем памяти.

Какой самый быстрый сериализатор для отправки объектов по моей локальной сети? Я не забочусь о взаимодействии или управлении версиями ... Мне нужна скорость!

Я открыт для сторонних альтернатив с открытым исходным кодом.

Ответы [ 4 ]

10 голосов
/ 09 марта 2009

Звучит как Буферы протокола может быть то, что вы ищете.

Мне известны три реализации .NET: protobuf-net , protobuf-csharp-port и Proto # .

Сравнение производительности показывает, что буферы протокола превосходят встроенные сериализаторы как по размеру, так и по скорости сериализации / десериализации.

5 голосов
/ 25 августа 2010

У меня есть тесты для ведущих сериализаторов .NET , доступные на основе набора данных Northwind.

@ marcgravell: двоичный protobuf-net - это самая быстрая тестовая реализация, примерно на 7x быстрее, чем самый быстрый из доступных сериализаторов Microsoft (XML DataContractSerializer) в BCL.

Microsoft JsonDataContractSerializer работает довольно медленно - на 9x медленнее, чем protobuf-net, и на 3,6x медленнее, чем мой JsonSerializer .

2 голосов
/ 11 марта 2009

При сравнении производительности , связанном с @Luke, обратите внимание, что DataContractJsonSerializer работает очень хорошо по сравнению с другими сериализаторами MS.

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

(Мне нравится, как Google принимает концепции CS 101 и прославляется их реализацией. В C мы называем "буфер протокола" "struct" s. Они отлично работают.)

0 голосов
/ 26 апреля 2016

Как я продемонстрировал в , этот ответ сгенерированный код может быть самым быстрым сериализатором. Тем не менее, он находится на ранней стадии и все еще испытывает недостаток в нескольких функциях, которые предлагают другие сериализаторы.

...