Schlechte Performance von MSXML



  • Morgen,

    also ich habe folgenden Code, um eine XML-Datei auszulesen und Node-Texte in einem vector zu speichern:

    // XMLDOMDocument erzeugen ("MSXML2.DOMDocument.6.0")
    // XML-Datei laden
    
    MSXML2::IXMLDOMNodeListPtr pNodeList = pXmlDocument->getElementsByTagName(L"Word");
    long length, i;
    _ASSERTE(SUCCEEDED(pNodeList->get_length(&length)));
    m_words.reserve(length); // vector <wstring> m_words
    
    wstring wTheNodeText;
    _variant_t var;
    IXMLDOMNodePtr pNode;
    
    for ( i = 0; i < length; i++) 
    {
      pNode = pNodeList->nextNode();
      _ASSERTE(SUCCEEDED( pNode->get_nodeTypedValue(&var)));
      wTheNodeText = var.bstrVal;
      m_words.push_back(wTheNodeText); 
    }
    

    Die XML-Datei ist folgendermaßen aufgebaut:

    ...
    <Word>abcd</Word>
    <Word>nochnwort</Word>
    ...
    

    Nun hab ich eine XML-Datei mit 102.000 Wörtern (bzw "Word"-Nodes) für ein Dictionary, was eigentlich nicht viel ist. Die Funktion hat jedoch eine Laufzeit von etwas über 2 Minuten. Kommentier ich die Zeile mit pNode->get_nodeTypedValue raus, beträgt die Laufzeit 1 Sekunde. Dieser Call zum Bestimmen des Textes scheint also nicht sehr effektiv zu sein. Probiert habe ich es auch schon mit pNode->get_text, was allerdings auch nicht schneller ist. Hat jemand ne Idee, ob man das irgendwie besser lösen kann?



  • verwende einen streambasierten ansatz, zum beispiel mit einem sax-parser.



  • hört sich gut an, werd ich mal versuchen, danke 🙂


Anmelden zum Antworten