使用XDocument.Load(xmlreader)方法?

5

我听说使用XDocumentLoadParse方法时通常会将整个文件加载到内存中,这就是为什么不建议使用这种方法解析大文件的原因...但如果我使用以下重载来读取xml文件呢?

XDocument xml = XDocument.Load(XmlReader.Create(@"C:\OP\file.xml", settings),LoadOptions.None);

它是否仍会将整个文件加载到内存中?如果是这样的话,这种过载有何作用?
1个回答

6
是的,这仍会将整个文件内容加载到内存表示中。它不如XElement.Load(XmlReader)方法有用,该方法可以非常有用地一次性将文档的一部分加载到内存中。
我认为XDocument.Load(XmlReader)方法主要是为了保持一致性而存在 - 但我可以看出在其他API提供XmlReader而不是原始数据的情况下它可能很有用。例如,您可以通过允许从其创建XmlReader来提供“虚假”XML访问的某些数据结构。这样它就永远不需要序列化到真正的XML中,然后再进行解析。
另一个用例是当您想使用一些LoadOptions中不可用的XmlReadSettings方面时,例如忽略注释或使用特定名称表。
但是,如果您担心文档不适合内存,则不应使用XDocument.Load(XmlReader)

一个大小为20MB的XML文件在内存中占用多少空间?这个数字是否会因不同的CPU(即具有不同时钟速度和核心数的CPU)而改变? - Bumba
@Bumba:CPU不会改变所需内存的数量。影响它的因素是文档结构(许多元素/属性中包含少量数据,或者少量元素/属性中包含大量数据)。我建议您使用实际数据运行测试。 - Jon Skeet
在这种情况下,配置XmlReadSettings的能力不是很有用吗? - Evk
@Evk:你的意思是如果想要控制忽略注释,而这不能通过LoadOptions来控制吗?是的,我猜是这样。我会编辑的。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接