Сериализация с использованием Protobuf-net и Protobuf C # Port против XML - PullRequest
1 голос
/ 06 июля 2011

Меня интересует определенная ситуация. У меня есть объект в C #, который я хотел бы сериализовать и десериализовать.

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

С точки зрения скорости, есть ли явный, определенный победитель между protobuf и XML? Предполагая, что все было сделано последовательно? т. е. тот же путь, параллельный код, простой и т. д. А также повлияет ли на скорость, если я переключу библиотеки, которые использует protobuf для сериализации и десериализации? (От protobuf-net до protobuf C # port?) Я совершенно новичок в этом вопросе, поэтому пока не знаю ответа, но слышал, что protobuf должен быть меньше, быстрее и проще, чем XML.

Любое понимание очень ценится! Спасибо! Off, чтобы написать тесты сейчас.

1 Ответ

1 голос
/ 06 июля 2011

Будет ли протобуф быстрее?Абсолютно.Я профилировал это много раз, все с похожими результатами, например:

и множество комментариев от счастливых пользователей.Честно говоря, я долгое время не сравнивал с версией Джона, и я не проводил прямого сравнения v2, но вот ключевой момент: в большинстве случаев окончательная пропускная способность является ограничивающим фактором производительности сетии они имеют одинаковый формат проводов, поэтому должны быть в значительной степени идентичны.Конечно, protobuf является также явно дешевле для чтения и записи, но если вы не используете мобильное устройство, которое является второстепенным.

Большая разница между protobuf-net и port - это то, что портированная версия (Jon's) использует (вполне разумно) подход protobuf (неизменяемые / сгенерированные объекты и т. д.), который может затруднить модернизацию к существующей модели типов - вам придется ввести отдельный слой DTO и картук этому.Что не является большой проблемой - просто соображение.И по этой причине вам может быть трудно провести прямое сравнение между XmlSerializer и портом;они оба получают ваши данные, но маршруты очень разные.И наоборот, protobuf-net сознательно позиционирует себя как очень похожий API на XmlSerializer и т. Д., Поэтому довольно просто создать набор тестов с использованием тех же объектов и т. Д. - просто изменив сериализатор.

...