Самый быстрый сериализатор и десериализатор с самым низким объемом памяти в C#?

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

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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам