Занимает ли переменная в памяти то же место, что и при сериализации?

если у класса был SerializableAttribute, а его объект был сериализован с BinaryFormatter, сериализованный размер равен размеру, который он занимал в памяти?

Изменить: Дополнительный вопрос: есть ли лучший способ узнать, сколько места объект занимает в памяти? достаточно ли приблизителен этот метод?


person Jader Dias    schedule 21.01.2010    source источник


Ответы (2)


Нет. Члены класса/структуры хранятся в памяти с дополнением, чтобы при необходимости выровнять их по границе четного слова (в соответствии с соответствующим типом данных). Сериализованные данные не имеют такого заполнения.

person Guffa    schedule 21.01.2010
comment
Вы правы насчет заполнения, и ваш ответ «Нет» правильный, но объяснение, по крайней мере, не является полным, просто потому, что имя класса, включая сборку, содержащую класс, также хранится, не говоря уже о других вещах, кроме объекта сами данные. - person Igor Korkhov; 21.01.2010
comment
@Igor: Да, хранится другая информация, но может быть возможно отделить метаданные от данных. Я хотел указать, что даже если бы метаданные можно было разделить, это все равно не возможный метод для расчета использования памяти, поскольку фундаментальный метод хранения отличается. - person Guffa; 21.01.2010
comment
[...] но может быть возможно отделить метаданные от данных [...] Это потребует создания вашего собственного BinaryFormatter :) - person Igor Korkhov; 21.01.2010
comment
Дополнительный вопрос: есть ли лучший способ узнать, сколько места объект занимает в памяти? достаточно ли приблизителен этот метод? - person Jader Dias; 21.01.2010
comment
@Jader: популярный метод - использовать сортировку для создания неуправляемой копии объекта. Это тоже не точно, но немного ближе. - person Guffa; 21.01.2010

Как правило, сериализованные объекты занимают больше места, поскольку также необходимо хранить явные метаданные. Однако в пространстве памяти запущенного процесса также есть метаданные, так как же учитывать часть метаданных, чтобы сделать правильное сравнение?

person Lucero    schedule 21.01.2010