2013-12-16 3 views
0

Я пытаюсь понять и решить наилучший подход к моей проблеме. У меня есть xsd, который представляет схему информации, которую я согласился с клиентом.Двоичная сериализация в C#: размер и производительность результата

Теперь, в моем приложении (C#, .net3.5) Я использую и уничтожаю объект, который был десериализован из xml, созданного в соответствии с схемой xsd.

Как только я заполняю объект данными, я хочу передать его другому приложению, а также сохранить его в db. У меня есть два вопроса:

  1. Я хотел бы сериализовать объект, чтобы быстро перейти к другому приложению: лучше бинарная или xml-сериализация?
  2. К сожалению, в db у меня есть поле ограниченного размера для хранения информации, поэтому мне нужно какое-то сжатие сериализованного объекта. Двоичная сериализация создает меньшие данные, затем сериализацию xml, или мне нужно в любом случае сжать эти данные? если да, то как?

Спасибо!

+0

«лучше» зависит от ваших потребностей. двоичная сериализация меньше и быстрее, чем xml-сериализация, но xml-файлы могут быть прочитаны и изменены вручную. Только вы можете ответить на вопрос, если вам нужно сжать данные. Вы единственный, кто знает размер ваших объектов. Вот класс, который можно использовать для сжатия: http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx – user1567896

+0

Если ваше приложение уже использует сериализацию xml для этих объектов, то это казалось бы, лучший план сделать это.Чтобы правильно ответить на ваш вопрос, хотя нам нужно было бы, среди прочего, узнать, насколько велики эти объекты (например, длина XML-файла, сгенерированного при сериализации), насколько далеко находится другое приложение, которое вы хотите передать, (т.е. то, что пропускная способность между машинами), и если у вас есть требования к производительности для извлечения и хранения в базе данных (поскольку сжатие по своему характеру потребует времени, чтобы делать это внутри и снаружи. – Chris

+0

Вы говорите, что у вас есть «поле ограниченного размера» для хранения информация - какой тип данных является полем? Если это строковое поле, тогда вы потенциально будете пытаться хранить двоичные данные там ... –

ответ

2

Я хотел бы сериализовать объект, чтобы быстро перейти к другому приложению: лучше бинарная или xml-сериализация?

Также недостаточно; двоичный файл может быть хорошим или плохим; xml может быть хорошим или плохим. Вообще говоря, двоичный файл меньше и быстрее обрабатывается, но переход на такой будет непригодным из кода, который ожидает xml.

Двоичная сериализация создает меньшие данные, а затем серию xml или мне нужно в любом случае сжать эти данные?

It can быть меньше; или его может быть больше; действительно, сжатие может сделать вещи меньше или больше.

Если пространство вашей главной заботой, я предложил бы запустить его через что-то вроде Protobuf-сети (двоичный сериализатором без вопросов контроля версий, общих для BinaryFormatter), а затем умозрительно сожмите его с GZipStream. Если сжатая версия меньше: сохраните ее (и маркер - возможно, преамбулу, в которой говорится: «Я сжат»). Если сжатая версия становится больше исходной, сохраните оригинал (опять же с преамбулой).

Вот недавний пробой производительности (скорость и размер) общих .NET сериализаторов: http://theburningmonk.com/2013/09/binary-and-json-serializer-benchmarks-updated/

Смежные вопросы