C# 数据集中的大型XML文件(outofmemory)

C# 数据集中的大型XML文件(outofmemory),c#,xml,dataset,C#,Xml,Dataset,我目前正在尝试将一个稍大的xml文件加载到数据集中。xml文件大约有700MB,每次我试图读取xml时,它都需要大量的时间,过了一会儿,它就会抛出一个“内存不足”异常 DataSet ds = new DataSet(); ds.ReadXml(pathtofile); 主要问题是,我需要使用这些数据集(我使用它将数据从xml文件导入sybase数据库(foreach表、foreach行、foreach列)),并且我没有scheme文件 我已经在谷歌上搜索了一段时间,但我只找到了对我来说不可用

我目前正在尝试将一个稍大的xml文件加载到数据集中。xml文件大约有700MB,每次我试图读取xml时,它都需要大量的时间,过了一会儿,它就会抛出一个“内存不足”异常

DataSet ds = new DataSet();
ds.ReadXml(pathtofile);
主要问题是,我需要使用这些数据集(我使用它将数据从xml文件导入sybase数据库(foreach表、foreach行、foreach列)),并且我没有scheme文件

我已经在谷歌上搜索了一段时间,但我只找到了对我来说不可用的解决方案

其他信息:
我使用Sybase(ASA 9)数据库,但我的C#应用程序在处理数据库之前崩溃。错误发生在我将XML读入数据集中并希望使用ds之后。我已经读到,当使用大内容的数据集时,这是一个已知的错误。我需要数据集中的数据至少一次,因为我需要将其导入数据库。

我想我们需要更多的数据。你在用什么程序?什么数据库?C#崩溃还是数据库崩溃?还是你的浏览器


主要的解决方案是为抛出内存不足异常的部分(我想这是您的C#应用程序)提供更多的内存和一个参数。如果它是Java程序,至少我会这么做

您需要找到一种“惰性”读取XML文件的方法,而不是一次将其全部放入内存

这篇kb文章展示了如何逐元素读取XML文件

我建议以这个例子为例,修改它以执行您的任务。

您可以使用ReadXml方法的重载来克服这个问题。而是传入一个缓冲流,看看这是否能加快速度

以下是代码:

DataSet ds = new DataSet();
FileStream filestream = File.OpenRead(pathtofile);
BufferedStream buffered = new BufferedStream(filestream);
ds.ReadXml(buffered);
根据您所讨论的数据的大小,数据集本身可能会受到内存限制。XML的一部分问题是,它可能会占用500kb的数据,而仅仅因为元素名和嵌套深度选择不当,就可以将其转换为500MB。由于缺少模式,您可以通过读取上述文件来缩短内存限制,只需将元素名称替换为较短的版本(例如,将
替换为
,以减少>60%的字节)

祝你好运,我希望这有帮助