Как часто следует вызывать метод каждого объекта GetobjectData во время пользовательской сериализации?
-
28-09-2019 - |
Вопрос
Я сериализацию данных в моем приложении, используя пользовательскую сериализацию, т. Е. Каждый из классов, которые я храним, имеет [Serializable]
атрибут и реализация ISerializable
. Отказ График объекта, являющийся сериацией, является достаточно сложным с большим количеством перекрестных ссылок между объектами / классами. Сериализация работает, но это довольно медленно. :(
Поместив точку останова в каждом соответствующем классе GetObjectData
Метод, я обнаружил, что я получаю много, гораздо больше хитов, чем у меня есть объекты.
Я запутался - мое понимание структуры сериализации было то, что она будет хранить каждый объект только один раз, даже если график объекта содержит несколько ссылок на него. Я предположил, что это означало каждый объект GetObjectData
Метод должен быть вызван только один раз во время сохранения. Я ошибся?
И если так, есть что-то, что я могу сделать в этом подходе, чтобы уменьшить количество звонков к моим классам » GetObjectData
методы?
Спасибо.
Решение
То MSDN Docs. Не гарантируйте только 1 вызов на экземпляр объекта.
Вы пробовали это с разными форматтерами? Есть комментарии здесь Для эффекта, что выбранная работа была сделана для улучшения этого. Специально для индиго (AKA WCF).
Не гарантируется, что этот метод будет вызываться только один раз на предмет экземпляра объекта во время сериализации. Следовательно, метод должен быть реализован таким образом, что его поведение будет таким же независимо от количества раз, когда он называется.