Я пытаюсь понять и решить наилучший подход к моей проблеме. У меня есть xsd, который представляет схему информации, которую я согласился с клиентом.Двоичная сериализация в C#: размер и производительность результата
Теперь, в моем приложении (C#, .net3.5) Я использую и уничтожаю объект, который был десериализован из xml, созданного в соответствии с схемой xsd.
Как только я заполняю объект данными, я хочу передать его другому приложению, а также сохранить его в db. У меня есть два вопроса:
- Я хотел бы сериализовать объект, чтобы быстро перейти к другому приложению: лучше бинарная или xml-сериализация?
- К сожалению, в db у меня есть поле ограниченного размера для хранения информации, поэтому мне нужно какое-то сжатие сериализованного объекта. Двоичная сериализация создает меньшие данные, затем сериализацию xml, или мне нужно в любом случае сжать эти данные? если да, то как?
Спасибо!
«лучше» зависит от ваших потребностей. двоичная сериализация меньше и быстрее, чем xml-сериализация, но xml-файлы могут быть прочитаны и изменены вручную. Только вы можете ответить на вопрос, если вам нужно сжать данные. Вы единственный, кто знает размер ваших объектов. Вот класс, который можно использовать для сжатия: http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx – user1567896
Если ваше приложение уже использует сериализацию xml для этих объектов, то это казалось бы, лучший план сделать это.Чтобы правильно ответить на ваш вопрос, хотя нам нужно было бы, среди прочего, узнать, насколько велики эти объекты (например, длина XML-файла, сгенерированного при сериализации), насколько далеко находится другое приложение, которое вы хотите передать, (т.е. то, что пропускная способность между машинами), и если у вас есть требования к производительности для извлечения и хранения в базе данных (поскольку сжатие по своему характеру потребует времени, чтобы делать это внутри и снаружи. – Chris
Вы говорите, что у вас есть «поле ограниченного размера» для хранения информация - какой тип данных является полем? Если это строковое поле, тогда вы потенциально будете пытаться хранить двоичные данные там ... –