XDocument 性能更优,适合新建、查询、修改和序列化小到中等 XML;XmlDocument 在复杂 XPath、节点事件和 DOM 兼容场景不可替代。
XDocument 通常比 XmlDocument 性能更好,尤其在新建、查询、修改和序列化小到中等规模 XML 时;但 XmlDocument 在某些特定场景(如反复读取、XPath 复杂查询、或需 DOM 兼容性)仍有优势。
XDocument 基于 LINQ to XML 设计,内部结构更轻量,节点对象更精简。创建一个简单 XML 文档时,XDocument 的对象分配更少,GC 压力更低。XmlDocument 则依赖传统的 XmlNode 层级继承体系(XmlElement、XmlText 等),每个节点都是完整类实例,内存开销明显更高。
XDocument 原生支持 LINQ 查询,底层对子节点列表做了优化(例如 XElement.Nodes() 返回的是轻量枚举器,而非 XmlNodeList 包装器)。XmlDocument 的 SelectNodes() 或 GetElementsByTagName() 需要创建 XmlNodeList 对象并维护活动引用,开销更大。
lementsByTagName("item") 快且代码更简洁XDocument 支持函数式构建(如 new XElement("root", items.Select(x => new XElement("item", x.Value)))),避免反复调用 AppendChild 等 DOM 方法。XmlDocument 修改需显式创建节点、设置属性、再挂载,每步都涉及类型检查和事件触发(如 NodeInserted),额外开销明显。
如果项目重度依赖 XPath 复杂查询(含轴运算、变量绑定)、需要节点事件(NodeChanged/NodeInserted)、或必须与旧系统(如某些 WebService、COM 组件)交互(它们只认 XmlNode),XmlDocument 仍是刚需。它还支持 DTD 验证、Entity 解析等 XDocument 明确不支持的特性。
基本上就这些。日常开发推荐优先用 XDocument,性能更优、写法更现代;只有明确需要 XmlDocument 特性时,才切换回去。