Serialization 如何最小化序列化数据-二进制序列化具有巨大的开销

Serialization 如何最小化序列化数据-二进制序列化具有巨大的开销,serialization,binary-serialization,Serialization,Binary Serialization,通过网络发送序列化整数时,我希望减小消息大小。 在下面的部分中,buff.Length是256-为了提高效率,这是一个巨大的开销! 如何将其减少到最小值(4字节+最小开销) 提前感谢,, ---KostaZ看看protobuf.net……它是一个非常好的序列化库(可以在NuGet上获得)。此外,理想情况下,您应该在内存流周围使用“using”语句 为了回应下面的评论,最有效的方法取决于您的用例。如果您确切地知道需要序列化什么,并且不需要通用序列化程序,那么您可以编写自己的二进制格式化程序,这可能

通过网络发送序列化整数时,我希望减小消息大小。 在下面的部分中,buff.Length是256-为了提高效率,这是一个巨大的开销! 如何将其减少到最小值(4字节+最小开销)

提前感谢,,
---KostaZ

看看protobuf.net……它是一个非常好的序列化库(可以在NuGet上获得)。此外,理想情况下,您应该在内存流周围使用“using”语句

为了回应下面的评论,最有效的方法取决于您的用例。如果您确切地知道需要序列化什么,并且不需要通用序列化程序,那么您可以编写自己的二进制格式化程序,这可能根本没有开销(这里有一些详细信息)


这是BinaryFormatter和protobuf.net的比较,供您参考。

是的,很好。但是,您是否可以发布一些链接,说明基本值在PB中的开销较低?被否决了,说得好。我不知道它会有一个更低的值,但我想我的观点是,它是一个比二进制格式化程序更好的(IMO)序列化库。开销将取决于序列化库,因此我猜他可以实现自己的序列化格式化程序,该程序将达到4字节加上“最小值”(如果他只是序列化整数,则该值可能为零),那么这将是最好的方法,但对于“最小化序列化数据”的通用回答来说我建议protobuf.net。还有Jon Skeetformatter.Serialize(memoryStream,val,Nothing)?当目标是网络时,为什么要序列化到内存?直接序列化到网络,那么网络提供的是内存而不是CPU。
            int val = RollDice(6);
            // Should 'memoryStream' be allocated each time!
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(memoryStream, val);
            byte[] buff = memoryStream.GetBuffer();