Существует ли быстрый способ очистить предыдущее содержимое объекта MSXML2.DOMDocument перед повторным использованием? У меня была привычка отбрасывать их и каждый раз создавать новый экземпляр, но мне кажется, что это расточительно, и профилирование нескольких тестовых примеров подтверждает это.
В этом случае я использую MSXML 3.0 для переносимости, и я понимаю, что у этой более старой версии есть некоторые странности, когда речь идет об использовании XPath для выбора больших наборов узлов. Попытка выделить все дерево документа, а затем удалить его, не выглядит чистой и работает не так быстро, как хотелось бы. «Ленивый выбор», используемый MSXML 3.0, также не внушает доверия:
Метод selectNodes
Ранее в MSXML 3.0 и более ранних версиях объект выбора, созданный путем вызова метода selectNodes, постепенно вычислял набор узлов. Если дерево DOM было изменено, в то время как вызов selectNodes все еще активно итерировал его содержимое, поведение могло потенциально изменить узлы, которые были выбраны или возвращены. В MSXML 4.0 и более поздних версиях результат набора узлов полностью рассчитывается во время выбора. Это гарантирует, что итерация проста и предсказуема. В редких случаях это изменение может повлиять на унаследованный код, написанный с учетом предыдущего поведения.
Я также понимаю, что для повторного использования такого объекта необходимо помнить о текущих настройках различных свойств (SelectionLanguage и т. Д.), Которые могут сохраняться между использованиями. Я думаю, что это не должно иметь большого значения, особенно если повторное использование всегда следует одному и тому же шаблону.
Я полагаю, что после этого мне понадобится какой-то чистый и быстрый способ очистки загруженного DOM для его повторного использования или дополнительные сведения о том, почему повторное использование может быть хуже, чем альтернатива отдыха.