none
Performances: XmlDocument vs XPathDocument RRS feed

  • Question

  • Pour mon apllication je dois accéder régulièrement (en lecture seule) à des données présente dans un fichier XML (accès à des noeuds élémentaires). Il existe au moins deux solutions :

     

    La première consiste à passer par un XmlDocument :

     

    Code Snippet

    XmlDocument doc = new XmlDocument();

    doc.Load("Data.xml");

    XmlNodeList nl = doc.GetElementsByTagName("MonNoeud");

    string str = nl[0].InnerText;

     

    La deuxième consiste à passer par un XmlPathDocument :

     

    Code Snippet

    XPathDocument xDoc = new XPathDocument("Data.xml");

    XPathNavigator xNavig = xDoc.CreateNavigator();

    XPathNavigator xNode = xNavig.SelectSingleNode("MonNoeud");

    string str = Convert.ToString(xNode.TypedValue);

     

    Savez-vous quelle est la plus performante deux deux solutions (à moins qu'il en existe une troisième) ?

     

    D'avance merci.

    François.

     

     

    mercredi 25 juillet 2007 11:04

Réponses

  • Merci pour vos réponses. J'ai finalemement réalisé un bench et les performances sont équivalentes. J'aurais donc tendance à privilier le XPathDocument car il semble être plus puissant pour les recherches (expressions xpath).

    jeudi 26 juillet 2007 15:00

Toutes les réponses

  • Je n'ai pas fait de tests précis mais à première vue, je dirais que le 1er est peut-être plus rapide.

     

    En effet, après un coup d'oeil avec Reflector, les 2 codes utilisent, en interne, la même technique pour charger le fichier XML donc étant donné que le 2ème code fait un appel supplémentaire à CreateNavigator, on peur penser qu'il est plus long.

    mercredi 25 juillet 2007 16:39
  • L'utilisation du XPathNavigator présente quand même un avantage dans sa surcharge prennant en paramètre une instance de XPathExpression, permettant ainsi de réutiliser une expression déjà compilée au lieu de repasser par la phase de compilation.
    Dans le cas présent je ne sais pas si celà ferait une différence, le mieux serait de tester en situation réelle pour se faire une idée.
    mercredi 25 juillet 2007 17:02
  • Merci pour vos réponses. J'ai finalemement réalisé un bench et les performances sont équivalentes. J'aurais donc tendance à privilier le XPathDocument car il semble être plus puissant pour les recherches (expressions xpath).

    jeudi 26 juillet 2007 15:00
  •  François296449 A écrit:

    Merci pour vos réponses. J'ai finalemement réalisé un bench et les performances sont équivalentes. J'aurais donc tendance à privilier le XPathDocument car il semble être plus puissant pour les recherches (expressions xpath).

    Parfaitement, à l'endroit ou je travaillais avant, on avait des bechmarks pour obtenir la meilleure solution. Je me souviens que lorsque les fichiers n'était pas volumineux, les deux méthodes était similaire. Par contre, lorsque l'on a tester avec de gros fichier XML contenant une grande hierarchie(plusieurs niveaux), le XPathDocument était supérieure.

     

    Mais puisque je ne travaille plus à cette endroit, je ne pourrais te donner les résultats...

    dimanche 29 juillet 2007 19:16
    Modérateur