c#中的二进制序列化:结果大小和性能

c#中的二进制序列化:结果大小和性能,c#,serialization,xsd,C#,Serialization,Xsd,我试图理解并决定解决我的问题的最佳方法。 我有一个xsd,它表示我与客户机商定的信息模式 现在,在我的应用程序(c#,.net3.5)中,我使用并使用一个对象,该对象已从根据xsd模式创建的xml中反序列化 当我用数据填充对象时,我希望将其传递给另一个应用程序,并将其存储在数据库中。我有两个问题: 我想序列化对象以快速传递给另一个应用程序:更好的是二进制序列化还是xml序列化 不幸的是,在db中,我有一个有限大小的字段来存储信息,所以我需要对序列化对象进行某种压缩。二进制序列化会创建比xml序列

我试图理解并决定解决我的问题的最佳方法。 我有一个xsd,它表示我与客户机商定的信息模式

现在,在我的应用程序(c#,.net3.5)中,我使用并使用一个对象,该对象已从根据xsd模式创建的xml中反序列化

当我用数据填充对象时,我希望将其传递给另一个应用程序,并将其存储在数据库中。我有两个问题:

  • 我想序列化对象以快速传递给另一个应用程序:更好的是二进制序列化还是xml序列化
  • 不幸的是,在db中,我有一个有限大小的字段来存储信息,所以我需要对序列化对象进行某种压缩。二进制序列化会创建比xml序列化更小的数据,或者我需要在任何情况下压缩这些数据?如果是,如何进行
  • 谢谢

    我想序列化对象以快速传递给另一个应用程序:更好的是二进制序列化还是xml序列化

    两者都不够具体;二进制可以是好的也可以是坏的;xml可以是好的,也可以是坏的。一般来说,二进制文件更小,处理速度更快,但对于需要xml的代码来说,更改为二进制文件将无法使用

    二进制序列化会创建比xml序列化更小的数据,或者我需要在任何情况下压缩这些数据

    它可以更小;或者它可以更大;事实上,压缩也可以使事物变小或变大

    如果您主要关心的是空间,我建议您通过protobuf net(一个二进制序列化程序,没有
    BinaryFormatter
    常见的版本控制问题),然后尝试使用
    GZipStream
    压缩它。如果压缩版本更小:存储它(和一个标记,可能是一个前导,上面写着“我被压缩了”)。如果压缩版本比原始版本大,则存储原始版本(同样带有序言)


    下面是常见.NET序列化程序性能(速度和大小)的最新分类:

    “更好”取决于您的需要。二进制序列化比xml序列化更小更快,但可以手动读取和更改xml文件。只有在必须压缩数据的情况下才能回答这个问题。你是唯一知道物体大小的人。下面是一个可用于压缩的类:如果您的应用程序已经在为这些对象使用xml序列化,那么这似乎是最好的方案。为了正确回答您的问题,我们需要知道这些对象有多大(例如序列化时生成的XML文件的长度),您要传递到的其他应用程序有多远(即计算机之间的带宽),以及您是否需要获取和存储到数据库的性能要求(因为从本质上讲,压缩在进出过程中需要时间。您说您有一个“有限大小的字段”要存储信息-字段的数据类型是什么?如果它是字符串字段,那么您可能很难在其中存储二进制数据…@user1567896:谢谢!将对象存储在内存中,然后在beofre将其存储在db上的那一刻,我希望以最快的速度和较小的输出。在这种情况下,根据您的reply@DanPuzey:不幸的金枪鱼这是一个字符串字段,在二进制表示完成后,我(以某种方式或另一种方式)将其转换为字符串表示(以及再次转换为string->object之后)