Самый быстрый сериализатор и десериализатор с самым низким объемом памяти в 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". Они отлично работают.)
Как я продемонстрировал в этом ответе, сгенерированный код может быть самым быстрым сериализатором. Однако это находится на ранней стадии и все еще испытывает недостаток в нескольких функциях, которые предлагают другие сериализаторы.