【发布时间】:2016-11-23 18:39:32
【问题描述】:
我尝试使用 linq to xml 来读取非常大的 xml 文件(407 MB):
XDocument xdoc = XDocument.Load(adress);
(地址 - 是文件的路径) 但是由于(我认为)集合变得超过 2GB,我得到了内存异常。 XML 文件如下所示:
<lemmata>
<lemma id="4694" rev="4694"><l t="аддукторен"><g v="ADJS"/></l><f t="аддукторен"><g v="masc"/><g v="sing"/></f><f t="аддукторна"><g v="femn"/><g v="sing"/></f><f t="аддукторно"><g v="neut"/><g v="sing"/></f><f t="аддукторны"><g v="plur"/></f></lemma>
<lemma id="4695" rev="4695"><l t="аддукторнее"><g v="COMP"/></l><f t="аддукторнее"></f><f t="аддукторней"><g v="V-ej"/></f><f t="поаддукторнее"><g v="Cmp2"/></f><f t="поаддукторней"><g v="Cmp2"/><g v="V-ej"/></f></lemma>
<lemma id="4696" rev="4696"><l t="аддукция"><g v="NOUN"/><g v="inan"/><g v="femn"/></l><f t="аддукция"><g v="sing"/><g v="nomn"/></f><f t="аддукции"><g v="sing"/><g v="gent"/></f><f t="аддукции"><g v="sing"/><g v="datv"/></f><f t="аддукцию"><g v="sing"/><g v="accs"/></f><f t="аддукцией"><g v="sing"/><g v="ablt"/></f><f t="аддукциею"><g v="sing"/><g v="ablt"/><g v="V-ey"/></f><f t="аддукции"><g v="sing"/><g v="loct"/></f><f t="аддукции"><g v="plur"/><g v="nomn"/></f><f t="аддукций"><g v="plur"/><g v="gent"/></f><f t="аддукциям"><g v="plur"/><g v="datv"/></f><f t="аддукции"><g v="plur"/><g v="accs"/></f><f t="аддукциями"><g v="plur"/><g v="ablt"/></f><f t="аддукциях"><g v="plur"/><g v="loct"/></f></lemma>
<lemma>.....</lemma>
</lemmata>
所以,有很多元素。我是否有机会仅阅读部分引理元素以使元素集合不超过最大大小?还是有其他方法可以读取此文件? 谢谢
【问题讨论】:
-
您可以结合使用
XmlReader和 LINQ to XML 来流式传输文件。这给您带来的好处是不必将整个文档加载到 DOM 中,而不会强迫您处理繁琐的低级XmlReaderAPI。看看this related answer。 -
@Charles Mager 谢谢。我会试试 XmlReader。