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
