繁体   English   中英

通过System.Xml.Serialization重用文件中的先前序列化

[英]Reuse Previous Serialization in File with System.Xml.Serialization

我有一个需要经常序列化的类,因为该信息是从我的应用程序外部的文件中读取的。 我的信息类可以用以下形式表示:

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

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

已编辑

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

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

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

C#非常相似: 是否有一种方法可以在不先加载XML节点的情况下将XML节点添加到磁盘上的文件中?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM