我有一个需要不断序列化的类,因为信息是从我的应用程序之外的文件中读取的。我的信息类可以用这样的代码表示:
[XmlRoot("log")]
public class Log
{
[XmlArray("infos")]
[XmlArrayItem("info")]
public List<Item> Infos { get; set; }
}
public class Item
{
[XmlElement("time")]
public DateTime Time { get; set; }
[XmlElement("info")]
public string Info { get; set; }
}
我的问题是,每次添加新元素时都必须编写完整文件,这会产生不必要的性能。像这样:
var serializer = new XmlSerializer(typeof(Log));
stream.SetLength(0);
serializer.Serialize(stream, log);
我在写作之前尝试删除了清理过程,但对性能没有任何影响。有没有人有提高性能的想法?
EDITED
此集合中的元素数量超过100,000个。
答案 0 :(得分:1)
流式传输到CSV或纯文本文件以获取日志将是比XML更好的解决方案,因为您可以简单地将日志项追加到它。
如果必须使用XML,则至少需要重写从当前位置到文件末尾的所有内容。使用streamreader和streamwriter将文件复制到您想要插入的位置,写入新数据,然后写入文件的其余部分。仍然会有IO瓶颈,这种方法唯一可以获得的就是不会在每次写入时序列化每个对象。
非常类似于:In C#, is there a way to add an XML node to a file on disk WITHOUT loading it first?
答案 1 :(得分:0)
我认为,您可以使用链接XmlReader/XmlWriter
来提高效果。
试着看看这篇文章http://msdn.microsoft.com/en-us/library/aa302289.aspx