Ho il seguente pezzo di codiceCome rendere la deserializzazione XML più veloce?
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();
}
}
L'oggetto stesso è stato generato tramite xsd.exe e assomiglierà questo:
/// <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;
}
}
...
Il metodo è tipicamente chiamato così:
var obj = (MyObject) XmlDeserialize(someXmlString, typeof(MyObject));
La seguente riga di codice richiede sempre una parte considerevole di tempo (rispetto a tutto il resto):
XmlSerializer serializer = new XmlSerializer(objType);
Che cosa sta succedendo qui, ad es. sta compilando un assembly di deserializzazione in background? Perché il problema delle prestazioni?
Cosa posso fare per migliorare questo problema di prestazioni?
Una nota a margine, invece di 'provare ... finalmente, potresti aver usato 'using'. – svick