我有一个大约500 MB的xml文件,我使用LINQ和c#来查询该文件,但它很慢,因为它将所有内容加载到内存中。无论如何,我可以查询该文件而不将所有内容加载到内存中吗?
由于
答案 0 :(得分:2)
This article可以帮助您正常运行。看一下SimpleStreamAxis
方法,这对于在大型XML文件中查找节点非常方便。我已经成功地在5GB XML文件上使用了这种方法的变体,而没有将文件加载到内存中。
答案 1 :(得分:0)
不,使用Linq时不可能。 Linq将完整xml的模型加载到内存中,以便您可以使用树结构进行访问。 如果要在不将文件加载到内存的情况下快速访问,可以使用XmlReader类。 这个类为您提供了一个只有快进的xml解析器,它只在内存中有当前节点。
以下是一些帮助:http://support.microsoft.com/kb/307548
修改抱歉,我不知道将xmlreader与linq结合起来是可能的。
答案 2 :(得分:0)
您可以使用MSDN网页上描述的关于XNode.ReadFrom
的技术,从XNode
生成XElement
个IE XmlReader
(在他们提供的示例中,XElement
s)
请注意,当您从Stream
或XmlReader
中读取{{1}}时,必须同时阅读该元素的所有内容 - 因此您仍需要一些自定义内容IEnumerator逻辑中的逻辑,以确保返回右 XElements - 例如,如果您返回根元素,您也可以立即解析整个文档,因为根元素包含几乎无处不在。 XNode.ReadFrom
示例也包含这样的逻辑。