【发布时间】:2016-07-17 12:17:21
【问题描述】:
我正在尝试通过 URl 读取 3GB XML 文件并将所有作业存储在数据集中。 XML 看起来像这样:
<?xml version="1.0"?>
<feed total="1621473">
<job>
<title><![CDATA[Certified Medical Assistant]]></title>
<date>2016-03-25 14:19:38</date>
<referencenumber>2089677765</referencenumber>
<url><![CDATA[http://www.jobs2careers.com/click.php?id=2089677765.1347]]></url>
<company><![CDATA[Broadway Medical Clinic]]></company>
<city>Portland</city>
<state>OR</state>
<zip>97213</zip>
</job>
<job>
<title><![CDATA[Certified Medical Assistant]]></title>
<date>2016-03-25 14:19:38</date>
<referencenumber>2089677765</referencenumber>
<url><![CDATA[http://www.jobs2careers.com/click.php?id=2089677765.1347]]></url>
<company><![CDATA[Broadway Medical Clinic]]></company>
<city>Portland</city>
<state>OR</state>
<zip>97213</zip>
</job>
</feed>
这是我的代码
XmlDocument doc = new XmlDocument();
doc.Load(url);
DataSet ds = new DataSet();
XmlNodeReader xmlReader = new XmlNodeReader(doc);
while (xmlReader.ReadToFollowing("job"))
{
ds.ReadXml(xmlReader);
}
但是我得到了内存溢出异常。在谷歌上浏览 发现了这个:
DataSet ds = new DataSet();
FileStream filestream = File.OpenRead(url);
BufferedStream buffered = new BufferedStream(filestream);
ds.ReadXml(buffered);
还是一样的例外。我还阅读了有关 XmlTextReader 的信息,但我不知道如何在我的情况下使用它。 我知道为什么会出现异常,但我不知道如何克服。谢谢
【问题讨论】:
-
异常详情是什么?我怀疑它可能是抛出“OutOfMemoryException”的 XmlDocument。原因是我整理了一些代码来生成一个大的 XML 文件,在我生成足够的数据之前,我构建的 XmlDocument 对象正在抛出。可能与节点的内部集合有关({System.Collections.ListDictionaryInternal.NodeKeyValueCollection})。
-
你想要什么输出?我不明白“让所有工作都痛苦”。
-
@MichaelKay:我的错,已编辑。我想将所有作业存储在数据集中,以便稍后我可以将所有作业存储在数据库表中。
-
@Stringfellow 在 XMLDocument 实例上调用 load 方法会尝试一次加载整个文件。该文件为 3 GB,因此发生异常。
标签: c# xml visual-studio-2012 dataset