tengo el siguiente fragmento de código¿Cómo hacer que la deserialización XML sea más rápida?
public static object XmlDeserialize(string xml, Type objType)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
XmlSerializer serializer = new XmlSerializer(objType);
stream = new StringReader(xml); // Read xml data
reader = new XmlTextReader(stream); // Create reader
return serializer.Deserialize(reader);
}
finally
{
if(stream != null) stream.Close();
if(reader != null) reader.Close();
}
}
El objeto en sí mismo se ha generado a través de xsd.exe y se ve algo así como esto:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class MyObject {
private DemographicsCriteriaStateStartAge[] startAgesField;
private DemographicsCriteriaStateEndAge[] endAgesField;
private DemographicsCriteriaStateFilter[] selectedFiltersField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("StartAge", IsNullable=false)]
public DemographicsCriteriaStateStartAge[] StartAges {
get {
return this.startAgesField;
}
set {
this.startAgesField = value;
}
}
...
El método se suele llamar así:
var obj = (MyObject) XmlDeserialize(someXmlString, typeof(MyObject));
La siguiente línea de código siempre toma una gran cantidad de tiempo (en comparación con todo lo demás):
XmlSerializer serializer = new XmlSerializer(objType);
¿Qué está pasando aquí, p. está compilando una asamblea de deserialización en el fondo? ¿Por qué el problema de rendimiento?
¿Qué puedo hacer para mejorar este problema de rendimiento?
Una nota al margen, en lugar de 'tratar ... finalmente', podrías haber usado 'using'. – svick