有没有办法将两个XmlDocuments组合起来,而不需要在内存中保留第一个XmlDocuments?如何在C#中高效地使用内存追加到大型XML文件
我必须循环查看多达一百个大型(〜300MB)XML文件的列表,每个最多可附加1000个节点,重复整个过程数次(因为清除新节点列表以节省内存) 。目前,我在将所有XmlDocument
加载到内存中,然后再添加新的节点,目前不成立。
你会说什么是最好的方式去做这件事?我有一些想法,但我不知道这是最好的:
- 决不加载整个
XMLDocument
,而是采用XmlReader
和XmlWriter
同时写入,随后更名为临时文件。 - 仅对所新节点
XmlDocument
,然后手动将其写在现有文件(即file.WriteLine("<node>\n")
- 别的东西吗?
任何帮助将非常感激。
编辑在回答一些意见的时候会提供一些更多的细节:
该程序将几个大日志解析成XML,按照源码分组成不同的文件。 s每天运行一次,一旦写入XML,就会有一个轻量级的专有阅读器程序,用于报告数据。该程序只需要每天运行一次,因此可能会很慢,但运行在执行其他操作的服务器上,主要是文件压缩和传输,这些操作不会受到太多影响。
数据库可能会更容易,但公司不会很快这么做!
正因为如此,该程序最多使用几GB的内存在开发机器上运行,但在服务器上运行时会抛出内存不足异常。
最后编辑 的任务是相当低prority,这就是为什么它只会花费额外得到一个数据库(虽然我会考虑蒙戈)。
该文件将仅附加到,并且不会无限增长 - 每个最终文件仅用于一天的日志值,然后在第二天生成新文件。
我可能会使用XmlReader/Writer方法,因为它确保XML有效性是最容易的,但我已将所有评论/答案都考虑在内。我知道拥有这么大的XML文件并不是一个特别好的解决方案,但这正是我所限制的,所以感谢所有的帮助。
我想数字1是要走的路,但我没有像这样的大文件的实际工作经验。 – 2012-08-03 15:54:23
什么是最终目标,我的意思是它的成就 – HatSoft 2012-08-03 16:02:40
你可以给出更多关于这个问题的背景吗?也许切换到数据库是一个更好的解决方案。 – eabraham 2012-08-03 16:03:28