是否有一种快速方法可以在重用之前清除MSXML2.DOMDocument对象的先前内容?我一直习惯于丢弃它们并每次都创建一个新的实例,但这让我觉得浪费,并且几个测试用例的分析似乎证实了这一点。
在这种情况下,我坚持使用MSXML 3.0来实现可移植性,并且我意识到这个旧版本在使用XPath选择大型节点时有些怪癖。试图选择整个文档树然后删除它并不会感觉干净,也不会像我想的那样快速运行。 MSXML 3.0使用的“懒惰选择”也没有激发信心:
以前,在MSXML 3.0及更早版本中,通过调用selectNodes方法创建的选择对象将逐渐计算节点集。如果修改了DOM树,而selectNodes调用仍在主动迭代其内容,则该行为可能会更改已选择或返回的节点。在MSXML 4.0及更高版本中,节点集结果在选择时完全计算。这确保了迭代简单且可预测。在极少数情况下,此更改可能会影响为了适应以前的行为而编写的遗留代码。
我也意识到重用这样的对象需要注意可能在使用之间徘徊的不同属性(SelectionLanguage等)的当前设置。我认为这不应该是一个大问题,特别是如果重复使用总是遵循相同的模式。
我认为我之后的目标是清除加载的DOM以重复使用它的一些干净而快速的方法,或更多的输入,以解释为什么重用可能比娱乐的替代方案更差。
答案 0 :(得分:2)
您可以考虑迁移到MSXML6:
此外,每次使用后都不应过多关注清理文档,因为MSXML内部有Garbage Collection,这意味着在替换文档元素时不会获得内存。我的建议是通过特定的清理工作实现和平,只需重复使用实例进行下一次加载或使用DOM API重建树。如果内存使用真的是一个大问题,XmlLite可以让你完全控制。