XmlDocument不适合大文件因其基于DOM会加载整个XML树到内存,导致高内存占用;而XmlReader采用流式读取,内存占用恒定且效率更高,适合处理大型XML文件。
处理大型XML文件时,内存消耗是关键问题。使用 XmlDocument 会将整个XML树加载到内存中,容易导致高内存占用甚至 OutOfMemoryException。而 XmlReader 提供了流式读取方式,仅在需要时加载部分数据,显著降低内存开销。
XmlDocument 是基于DOM(文档对象模型)的解析器,它会把整个XML结构解析成内存中的树形对象。这意味着:
这种模式在处理几百KB或几MB的小文件时表现良好,但面对几十MB以上的文件就显得力不从心。
XmlReader 是只进、只读的流式解析器,采用“拉式”读取机制,逐节点处理,无需构建完整对象树。适合以下场景:
大量同构记录(如订单列表)它的内存占用基本恒定,通常只有几十KB,与文件大小无关。
假设有一个包含上万条商品记录的XML文件:
用 XmlDocument 处理:
XmlDocument doc = new XmlDocument();改用 XmlReader 后:
using (XmlReader reader = XmlReader.Create("products.xml")) {这段代码内存占用稳定,执行效率更高,尤其在服务器端批量处理时优势明显。
ReadSubtree() 提取局部片段后交由小范围XmlDocument处理StringBuilder
yield return 实现迭代器模式,实现惰性求值基本上就这些。对于大型XML处理,优先选择 XmlReader 是更稳健的做法。虽然编码复杂度略有上升,但换来的是可预测的内存行为和良好的扩展性。