【问题标题】:Serialize C# objects to XML - Fastest way?将 C# 对象序列化为 XML - 最快的方法?
【发布时间】:2013-01-21 09:50:32
【问题描述】:

我有一个将 c# 对象序列化为 xml 文件的应用程序。我目前正在使用 .Net XmlSerializer。

我遇到的问题是,我需要序列化约 8000 个主节点(每次 4-10 个子节点),目前我需要 15-20 分钟才能将它们全部序列化。

我必须保持相同的 XML 输出,因为文件是由另一个程序而不是我的程序读取的,我不能让它们改变读取文件的方式。

我做了一些搜索,找到了很多比较,但它们都涉及使用 protobuf-net,它具有二进制序列化。

所以我的问题是:如何改进这个序列化时间?另一个序列化器?向我的模型添加更多属性(目前我只有 XmlName,列表也一样)。

谢谢!

【问题讨论】:

    标签: .net xml serialization xml-serialization


    【解决方案1】:

    看看下面的链接,有一些技巧可以提高 XML 序列化性能

    http://msdn.microsoft.com/en-us/library/ff650685.aspx

    如果您可以更改组件的逻辑,我会使用数据库来存储如此大的 XML,因为尚未进行序列化以存储非常大的 XML 文件

    【讨论】:

    • 我已经全部 XmlIgnore,那么结束格式只包含需要的数据。我必须将它们放在一个文件中,因为我必须将此文件推送到 FTP 服务器上,该服务器会将此文件分发给其他服务。你以为如果我实现 mySelf 的 ISerializable 方法,会比 [Serializable] 属性快吗?
    • 在上面的链接中也说过会更快一些 - 实现 ISerializable。
    • 是的,但您知道它将如何改进吗?因为如果要在我的 20 分钟内赢得 30 秒,那是不值得的。
    • 你不会改进超过几分钟,因为你的瓶颈是 XML 的大小
    【解决方案2】:

    由于瓶颈可能是大字符串处理,您可能需要考虑直接写入 FileStream 的手写代码。 如果您喜欢冒险,您还可以尝试为CGbR Project 生成编写 IGenerator 的代码。但这只有在你有许多不同的类时才有意义。

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 2012-12-30
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多