我注意到有两种不同的方法将数据写到XML文件中(为简洁起见,省略了错误处理)。
第一种方法是构建XML文档,然后简单地将XML保存到文件中:
using (XmlWriter writer = XmlWriter.Create(fileName))
{
writer.WriteStartDocument(true);
writer.WriteStartElement("parentelement");
writer.WriteEndElement();
writer.WriteEndDocument();
}第二种方法是创建一个MemoryStream,然后将MemoryStream保存到一个文件中:
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
writer.WriteStartDocument(true);
writer.WriteStartElement("parentelement");
writer.WriteEndElement();
writer.WriteEndDocument();
}
using (FileStream fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
{
ms.WriteTo(fs);
ms.Dispose();
}我猜测使用MemoryStream的逻辑是为了确保可以在尝试保存文件之前构建该文件。在向MemoryStream文件中添加条目时,XML方法是否提供原子写事件和/或防止写问题?
有没有人能解释一下,这是不是真的有必要,或者只是向我的项目中添加不必要的代码行的一种过度杀伤力?
发布于 2009-01-28 08:21:22
在这种情况下,MemoryStream版本是浪费的。如果您想执行Stream-like工作,但又不想要实际的文件,那么MemoryStream是很有用的。如果你正在写一个文件,那么只需要写这个文件就行了。如果你正在写一个文件,那就直接写到这个文件中去。(a file )这就避免了在内存中缓冲所有数据的需要。
发布于 2009-11-02 00:17:38
内存流方法对于简单的操作确实是浪费的,但对于将xml保存为加密文件、压缩文件等情况,它是非常有用的。
发布于 2009-01-28 08:23:40
这是一种过度的杀伤力和浪费。
这两种关键方法都是基于
第一种方法需要创建文档的内存模型( DOM模型就是为其设计的)。一旦你完成了它,直接写入文件流就可以了。
第二种方法可以节省大量的内存和复杂性,只需使用XmlWriter,它可以直接指向结束流(在本例中是文件流)。
在任何阶段都不需要使用MemoryStream
https://stackoverflow.com/questions/486843
复制相似问题