J'ai la pièce de code suivanteComment rendre la désérialisation XML plus rapide?
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'objet lui-même a été généré par xsd.exe et ressemble un peu à ceci:
/// <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;
}
}
...
La méthode est généralement appelée comme ceci:
var obj = (MyObject) XmlDeserialize(someXmlString, typeof(MyObject));
La ligne de code suivante prend toujours une bonne partie du temps (par rapport à tout le reste):
XmlSerializer serializer = new XmlSerializer(objType);
Ce qui se passe ici, par ex. compile-t-il un assemblage de désérialisation en arrière-plan? Pourquoi le problème de performance? Que puis-je faire pour améliorer ce problème de performance?
Une note de côté, au lieu de 'essayer ... enfin, vous auriez pu utiliser 'using'. – svick