none
C# Вопрос про размер файла после сериализации BinaryFormatter RRS feed

  • Вопрос

  • На многих форумах пишут, что BinaryFormatter удобно применять для сжатия выходного (сериализованного) файла.

    Попробовал сериализовать им свои данные - размер превышает XML-сериализацию в 5 раз! В чем дело?

    Спасибо

    4 февраля 2013 г. 8:39

Ответы

Все ответы

  • Как раз наоборот BinaryFormatter сериализует объект "полностью", поэтому он по логике должен давать больший размер, чем XML.

    Возможно он лучше жмется архиватором, в чем я тоже сомневаюсь та как XML это текст, а он архиваторами жмется всегда лучше всего.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    4 февраля 2013 г. 8:59
    Отвечающий
  • Меня терзают смутные сомнения (c) 

    Ведь название говорит само за себя - бинарный. А тут, глянул в файлик там прямым текстом куча букв:

    %ModuleDef+<ModuleType>k__BackingField$ModuleDef+<SlotUsage>k__BackingField!ModuleDef+<InSize>k__BackingField"ModuleDef+<OutSize>k__BackingField#ModuleDef+<DiagSize>k__BackingField#ModuleDef+<Channels>k__BackingField ModuleDef+<Slots>k__BackingField(ModuleDef+<AlliasModules>k__BackingField

    ну и тому подобное

    4 февраля 2013 г. 9:12
  • я особо не разбирался,
    но у меня вроде бы бинарный меньше ест места.

    место ест описание типов,
    а сами данные мало занимают наверное.

    можно попробовать массив байт записать
    4 февраля 2013 г. 10:21
  • Если важно сжать данные как можно сильнее и быстрее, то воспользуйтесь protobuf-net - вот опыты над ним (в них же и показано, что Binary не особо лучше Xml сериализатора).

    • Изменено Anton.MaksimovEditor 4 февраля 2013 г. 11:08
    • Помечено в качестве ответа nvkokorin 4 февраля 2013 г. 12:42
    4 февраля 2013 г. 11:06
    Отвечающий
  • Если важно сжать данные как можно сильнее и быстрее, то воспользуйтесь protobuf-net - вот опыты над ним (в них же и показано, что Binary не особо лучше Xml сериализатора).

    Спасибо, попробую заюзать
    4 февраля 2013 г. 12:42
  • Как правильно отметил LXGDARK, форматтер записывает всю информацию о типе. Поэтому, если названия типов длинные (вложенные пространства имён), и сохраняемых типов много разных, то оверхед получится большой. В этом случае форматтер проиграеть xml-сериализатору.

    Но если записываются однотипные данные, например, массив чисел, то данных о типах (массив и  int) будет мало, а сами данные будут записаны компактно. Тут победит форматтер.

    4 февраля 2013 г. 12:44