Сериализация Xml не использует атрибут Serializable. Сериализатор xml фактически генерирует сборку, которая отображает xml на объект, он не использует отражение. Это одна из причин, по которой сериализация Xml работает только с публичными пользователями.
Одна вещь, которую вы можете попробовать, это измерить, используя DataContractSerializer
, который является частью WCF. Было бы интересно увидеть разницу.
Я никогда не сталкивался с ограничением производительности лично, но у меня также нет больших объектов, таких как ваше описание.
Следует обратить внимание на конструктор, который вы используете для создания XmlSerializer
, некоторые из них не кэшируют сгенерированную сборку и приведут к потере производительности и утечке памяти, поскольку каждый вызов будет генерировать все больше сборок. Если это так, у вас есть два варианта:
1) Кэшируйте созданный вами экземпляр сериализатора. Я считаю, что это потокобезопасно, но вы захотите перепроверить MSDN.
2) Используйте другой конструктор для создания XmlSerializer.