Имплементация ISerializable увеличила размер bin-файла
От: Slayerrr  
Дата: 09.03.06 09:29
Оценка:
Имеется .Net 1.1, C#

Вопрос по сериализации при помощи BinaryFormatter.

Есть у меня некое количество классов, помеченных атрибутом Serializable. И сделал я для каждого такого класса имплементацию ISerializable + десериализующий к-тор. Имплементация GetObjectData — тривиальная: все те поля, что и так сериализовались, я в инфу вкидываю при помощи AddValue.

Неочевидный для меня побочный эффект таких изменений кода: один и тот же граф объектов, сериализованный автоматически при помощи BinaryFormatter, и сериализованный новыми версиями классов (ISerializable) тем же форматтером занимает почти в два раза больше места во втором случае. Причем, при сериализации SoapFormatter'ом — разница в размере выходных файлов минимальна.

В чем может быть дело?
Re: Имплементация ISerializable увеличила размер bin-файла
От: andreich78 Россия  
Дата: 09.03.06 12:55
Оценка:
Здравствуйте, Slayerrr, Вы писали:

S>Имеется .Net 1.1, C#


S>Вопрос по сериализации при помощи BinaryFormatter.


S>Есть у меня некое количество классов, помеченных атрибутом Serializable. И сделал я для каждого такого класса имплементацию ISerializable + десериализующий к-тор. Имплементация GetObjectData — тривиальная: все те поля, что и так сериализовались, я в инфу вкидываю при помощи AddValue.


S>Неочевидный для меня побочный эффект таких изменений кода: один и тот же граф объектов, сериализованный автоматически при помощи BinaryFormatter, и сериализованный новыми версиями классов (ISerializable) тем же форматтером занимает почти в два раза больше места во втором случае. Причем, при сериализации SoapFormatter'ом — разница в размере выходных файлов минимальна.


S>В чем может быть дело?

unicode??
Re[2]: Имплементация ISerializable увеличила размер bin-файл
От: xxm  
Дата: 04.04.06 14:37
Оценка:
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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.