Используется ли в сериализации datacontract отражение? - PullRequest
0 голосов
/ 28 февраля 2010

XmlSerialization создает прокси сериализатора для каждого класса. Прокси находится в другой сборке, поэтому он может сериализовать только открытые поля.

Сериализация DataContract может также сериализовать приватные поля. Означает ли это, что использует отражение? Разве это не медленнее, чем использование прокси (кроме первого раза)?

1 Ответ

1 голос
/ 28 февраля 2010

На этой странице protobuf-net производительность DataContractSerializer значительно выше, чем XmlSerializer. Конечно, вы всегда должны тестировать свои собственные данные, но если вы хотите заменить XmlSerializer, вы, скорее всего, найдете DataContractSerializer как улучшение производительности.

Я не уверен, как DataContractSerializer реализован внутри, но обычно сериализаторы высоко оптимизированы. Это особенно верно для DataContractSerializer, поскольку это большая часть картины производительности для WCF. Сериализатор нередко генерирует код MSIL на лету. Когда это будет сделано, DynamicMethod позволит вам (на удивление!) Обойти проверку видимости (см. MSDN ), так что вы сможете получить доступ к закрытым полям без отражения.

С MSDN :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...