Search code examples
c#performancexml-serializationsgen

What is the most efficient way to Deserialze an XML file


Aloha,

I have a 8MB XML file that I wish to deserialize. I'm using this code:

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; 
}

This code runs in about a minute, which seems rather slow to me. I've tried to use sgen.exe to precompile the serialization dll, but this didn't change the performance.

What other options do I have to improve performance?

[edit] I need the object that is created by the deserialization to perform (basic) transformations on. The XML is received from an external webservice.


Solution

  • The XmlSerializer uses reflection and is therefore not the best choice if performance is an issue.

    You could build up a DOM of your XML document using the XmlDocument or XDocument classes and work with that, or, even faster use an XmlReader. The XmlReader however requires you to write any object mapping - if needed - yourself.

    What approach is the best depends stronly on what you want to do with the XML data. Do you simply need to extract certain values or do you have to work and edit the whole document object model?