【发布时间】:2014-08-17 12:38:44
【问题描述】:
我正在阅读非常大的 Xml 文件 (400+ MB),压缩后的 15 MB 已下载并解压缩到 MemoryStream。我每次都遇到System.OutOfMemoryException。我尝试使用StreamReader.ReadToEnd() 并将其读入字符串,但不起作用。
我四处搜索并使用XmlReader 并将其加载到XElement,正如此处的帖子所建议的那样。但是,我仍然遇到OutOfMemoryException 错误。
string downloadUrl = requestStatus.ReportDownloadUrl;
//create a network stream to the report Url
using (Stream reportZipStream = new WebClient().OpenRead(downloadUrl)) //download the file
using (Stream reportZipMemoryStream = new MemoryStream()) //initilize zip memorystream
using (Stream reportXmlStream = new MemoryStream()) //load xml file to memorystream for manipulation
{
//copy zip file to memorystream
reportZipStream.CopyTo(reportZipMemoryStream);
reportZipMemoryStream.Seek(0, SeekOrigin.Begin);
//unzip to Xml memory stream
using (ZipFile reportZip = ZipFile.Read(reportZipMemoryStream))
{
reportZip[0].Extract(reportXmlStream);
}
reportXmlStream.Seek(0, SeekOrigin.Begin);
Dictionary<string, object> parsedXml = default(Dictionary<string, object>);
//read and parse
if (reportXmlStream.CanRead && reportXmlStream.Length > 0)
{
XmlDataParser parser = new XmlDataParser();
using (XmlReader reader = XmlReader.Create(reportXmlStream))
{
XElement elem = XElement.Load(reader); //out of memory error here
parsedXml = parser.doParse(elem);
}
}
【问题讨论】:
-
XElement.Load将加载整个 url/流,所以你知道。 -
关于如何在 C# 中处理大型 xml 文件已关闭为重复。
-
机器上有多少内存?机器是64位的吗?
-
我的机器是 4GB 64bit
标签: c# xml xmlreader memorystream xelement