2012-03-09 30 views
3

我已经编写了一个控制台应用程序来从Web服务器获取一些信息,将其转换为XML并保存。我手动创建了XML(使用StringBuilder附加字符串)。由于XML可能非常大,对于内存而言,使用StringBuilderXMLDocument类还是更好? 准确地说,我的问题是,如果XML是10mb文本,那么使用StringBuilder.append("")System.XML命名空间的内存效率如何?StringBuilder或XMLDocument?

我认为一个更有效的方法是使用StringBuilder,但每次迭代后将HD保存到HD上的文件并清除stringbuilder对象。任何意见? 在此先感谢。 :)

回答

10

两者都没有;我会用一个XmlWriter

using(var file = File.Create(path)) 
using(var writer = XmlWriter.Create(file)) 
{ 
    // write to writer here 
} 

这避免了缓冲大量内存中的数据,这既StringBuilderXmlDocument会做的,而且避免了所有你将面对如果手动创建XML编码问题(不一个好主意,说实话)。

+0

感谢您的输入:) – 2012-03-09 08:48:45

5

我不会使用StringBuilder来手动创建XML,但有太多错误空间(如果它正确地转义字符串)。

要编写更大尺寸的XML文件,您应该使用XmlWriter类。

+0

您是对的我意识到它容易出错,但我的XML不太复杂,它太大了。 :) – 2012-03-09 09:43:08

0

如果您有XML的XSD,我会使用xsd.exe XML Schema Definition Tool,它可以从中生成c#类。
从代码中很容易序列化和反序列化XML,因此您不必使用长字符串。只需构建您的课堂并将其保存为有效的XML文本。

+0

是的,我知道,但目前我只是在寻找性能。谢谢 :) – 2012-03-09 09:27:47