Вопрос по сериализации при помощи BinaryFormatter.
Есть у меня некое количество классов, помеченных атрибутом Serializable. И сделал я для каждого такого класса имплементацию ISerializable + десериализующий к-тор. Имплементация GetObjectData — тривиальная: все те поля, что и так сериализовались, я в инфу вкидываю при помощи AddValue.
Неочевидный для меня побочный эффект таких изменений кода: один и тот же граф объектов, сериализованный автоматически при помощи BinaryFormatter, и сериализованный новыми версиями классов (ISerializable) тем же форматтером занимает почти в два раза больше места во втором случае. Причем, при сериализации SoapFormatter'ом — разница в размере выходных файлов минимальна.
В чем может быть дело?
Re: Имплементация ISerializable увеличила размер bin-файла
Здравствуйте, Slayerrr, Вы писали:
S>Имеется .Net 1.1, C#
S>Вопрос по сериализации при помощи BinaryFormatter.
S>Есть у меня некое количество классов, помеченных атрибутом Serializable. И сделал я для каждого такого класса имплементацию ISerializable + десериализующий к-тор. Имплементация GetObjectData — тривиальная: все те поля, что и так сериализовались, я в инфу вкидываю при помощи AddValue.
S>Неочевидный для меня побочный эффект таких изменений кода: один и тот же граф объектов, сериализованный автоматически при помощи BinaryFormatter, и сериализованный новыми версиями классов (ISerializable) тем же форматтером занимает почти в два раза больше места во втором случае. Причем, при сериализации SoapFormatter'ом — разница в размере выходных файлов минимальна.
S>В чем может быть дело?
unicode??
Re[2]: Имплементация ISerializable увеличила размер bin-файл
S>>Имеется .Net 1.1, C#
S>>Вопрос по сериализации при помощи BinaryFormatter.
S>>Есть у меня некое количество классов, помеченных атрибутом Serializable. И сделал я для каждого такого класса имплементацию ISerializable + десериализующий к-тор. Имплементация GetObjectData — тривиальная: все те поля, что и так сериализовались, я в инфу вкидываю при помощи AddValue.
S>>Неочевидный для меня побочный эффект таких изменений кода: один и тот же граф объектов, сериализованный автоматически при помощи BinaryFormatter, и сериализованный новыми версиями классов (ISerializable) тем же форматтером занимает почти в два раза больше места во втором случае. Причем, при сериализации SoapFormatter'ом — разница в размере выходных файлов минимальна.
S>>В чем может быть дело? A>unicode??
Может быть вот что:
при станлдартной бинарной сериализации сначала сериализуется метанформация. Каждому елементу (классу, полю) ассоциируется свой ID. Тогда результирующий стрим будет: [метаинфо] + foearch object [idType] foreach field([id_field=value]).
При реализации ISerializable в стрим попадает всё as is: foreach object [typeName] foreach field (field_name = value)
Собственно теряем место в строках описывающих metadata для каждого объекта, с такой проблемой сталкивался при оптимизации DAL.