使用内存一次从磁盘读取一条记录的XML

时间:2011-08-08 19:09:08

标签: c# xml io

我正在尝试对磁盘上已排序的XML文件块进行合并排序。没有机会他们都适合记忆。我的XML文件由记录组成。

说我有n个XML文件。如果我有足够的内存,我会将每个文件的全部内容读入一个对应的队列,每个文件一个队列,比较每个队列中每个项目的时间戳,并将具有最小时间戳的那个输出到另一个文件(合并文件) 。这样,我将所有小文件合并为一个大文件,所有条目都按时间排序。

问题是我没有足够的内存来读取所有带有.ReadToEnd的XML,以便稍后传递给XDocument的.Parse方法。

是否有一种干净的方法来读取足够的记录,以便为下一次传递填充每个队列以比较其XElement属性“TimeStamp”,还记得它已读取的磁盘中的哪个XElement?

谢谢。

3 个答案:

答案 0 :(得分:1)

您正在寻找XmlReader

  

表示提供快速,非缓存,仅向前的读者   访问XML数据。

答案 1 :(得分:1)

所以它已经过时了,但这正是SAX解决的问题。它是XML的简单API,基于回调。您启动读取操作,并为每条记录回调您的代码。这可能是一个optioin,因为这不需要程序加载整个XML文件(ala XMLDocument)。谷歌SAX。

答案 2 :(得分:0)

如果您喜欢linq to xml api,this codeplex project可以满足您的需求。