Какой самый эффективный способ десериализации файла XML - PullRequest
3 голосов
/ 04 февраля 2009

Aloha,

У меня есть 8 МБ XML-файл, который я хочу десериализовать. Я использую этот код:

public static T Deserialize<T>(string xml)
{
    TextReader reader = new StringReader(xml);
    Type type = typeof(T);
    XmlSerializer serializer = new XmlSerializer(type);
    T obj = (T)serializer.Deserialize(reader);
    return obj; 
}

Этот код выполняется примерно за минуту, что мне кажется довольно медленным. Я пытался использовать sgen.exe для предварительной компиляции DLL сериализации, но это не изменило производительность.

Какие еще есть варианты для улучшения производительности?

[править] Мне нужен объект, созданный десериализацией для выполнения (базовых) преобразований. XML получен от внешнего веб-сервиса.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2009

XmlSerializer использует отражение и поэтому не является лучшим выбором, если производительность является проблемой.

Вы можете создать DOM своего XML-документа, используя классы XmlDocument или XDocument, и работать с этим, или, еще быстрее, использовать XmlReader. Тем не менее, XmlReader требует, чтобы вы писали любое сопоставление объектов - при необходимости - самостоятельно.

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

2 голосов
/ 06 февраля 2009

Да, он использует отражение, но производительность - это серая область. При разговоре о файле 8 Мб ... да, это будет намного медленнее. Но если иметь дело с небольшим файлом, этого не будет.

Я бы НЕ сказал, что чтение файлового флакона XmlReader или XPath будет проще или быстрее. Что проще, чем сказать что-то, чтобы превратить ваш xml в объект или ваш объект в XML ...? не очень.

Теперь, если вам нужен точный контроль зерна, возможно, вам нужно сделать это вручную.

Лично выбор такой. Я готов отказаться от скорости, чтобы сохранить ТОННУ отвратительного противного кода.

Как и все остальное в разработке программного обеспечения, есть компромиссы.

1 голос
/ 05 мая 2009

Вы можете попробовать реализовать IXmlSerializable в своем классе "T" и написать собственную логику для обработки XML.

...