0

我有一个需要不断序列化的类,因为信息是从我的应用程序外部的文件中读取的。我的信息类可以用这样的东西来表示:

[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);

我在写之前尝试过删除清理过程,但对性能没有任何影响。性能。有没有人有提高性能的想法?

已编辑

此集合中的元素数量超过 100,000。

4

2 回答 2

1

将日志流式传输到 CSV 或纯文本文件将是比 XML 更好的解决方案,因为您可以简单地将日志项附加到它。

如果您必须使用 XML,您至少需要重写从当前位置到文件末尾的所有内容。使用流读取器和流写入器将文件复制到您要插入的位置,写入新数据,然后写入文件的其余部分。仍然会有 IO 瓶颈,使用这种方法唯一可以获得的好处是不会在每次写入时序列化每个对象。

非常类似于:在 C# 中,有没有办法将 XML 节点添加到磁盘上的文件而不先加载它?

于 2013-07-16T20:09:56.603 回答
0

我认为,您可以使用链接来提高性能XmlReader/XmlWriter。尝试查看这篇文章http://msdn.microsoft.com/en-us/library/aa302289.aspx

于 2013-07-16T19:55:20.783 回答