【发布时间】:2010-04-20 06:43:28
【问题描述】:
我目前正在使用 XmlTextWriter 类将包含大量数据(100000+ 条记录) 的数据库表导出到 xml 文件中,并且我正在直接写入文件物理驱动器。
_XmlTextWriterObject = new XmlTextWriter(_xmlFilePath, null);
虽然我的代码运行正常,但我的问题是这是最好的方法吗?我是否应该先将整个 xml 写入内存流,然后再将 xml 文档从内存流写入物理文件?两种情况下对内存/性能有何影响?
编辑
抱歉,我实际上无法传达我的意思。感谢 Ash 指出。
我确实会使用 XmlTextWriter 但我的意思是说是否将物理文件路径字符串传递给 XmlTextWriter 构造函数(或者,如约翰建议的那样,传递给 XmlTextWriter.Create() 方法)或使用基于流的 api。我当前的代码如下所示:
XmlWriter objXmlWriter = XmlTextWriter.Create(new BufferedStream(new FileStream(@"C:\test.xml", FileMode.Create, System.Security.AccessControl.FileSystemRights.Write, FileShare.None, 1024, FileOptions.SequentialScan)), new XmlWriterSettings { Encoding = Encoding.Unicode, Indent = true, CloseOutput = true });
using (objXmlWriter)
{
//writing xml contents here
}
【问题讨论】:
-
@Filip,放轻松! Kayes 成为会员仅 14 天,只问了 5 个问题。
-
处理任何类型的大文件时,我都会避免将其全部加载到内存中。而是使用基于流的 API 来确保在任何时候只有文件的块在内存中。我相信 XmlTextWriter 可以让您逐个元素地写入文件。
-
@Filip 我会努力成为一个好公民@StackOverflow :) 现在快乐吗? @Ash 谢谢。我实际上打算说要使用基于流的 api。查看编辑。
-
你不再需要 BufferedStream,它自 2 以来就内置在 FileStream 中
-
@Ash,@Kayes,这根本没有任何不尊重的意思。更像一个;普通你可以做到!或者类似的东西:)