【问题标题】:Serialize unity3d C# objects to string and back将unity3d C#对象序列化为字符串并返回
【发布时间】:2014-08-27 08:41:21
【问题描述】:

鉴于我的服务器 API 需要 C# 字符串,推荐使用这两种方法中的哪一种?哪一个会导致字符串长度最短?

1) Protobuf-net 使用 protobuf-net 转换对象 字节数组 使用 Convert.ToBase64String 方法转换字节数组 字符串

2) 直接使用Json .Net 转换对象 字符串

我们的项目中有 Protobuf-net 与 byte[] 服务器 API 一起工作。现在我们的服务器正在迁移到字符串 API 而不是 byte[]。我们不确定是应该迁移到 Json .Net 还是继续使用 protobuf-net 并使用 Convert Base 64 进行额外的字符串到 byte[] 的转换。

你有什么建议?

【问题讨论】:

  • Which one of the two is more performant given my server API is expecting a C# string 简单。阅读this
  • 我想知道询问基准测试结果的一般优点...我认为大多数情况都包含在 1. 编写时间
  • @EZI 感谢您分享链接。我完全同意你的看法。但是,如果有人已经进行了比较或已经在同一条船上。我更愿意从他们的经验中学习,而不是自己尝试。
  • @user3504386 一般来说,在这种情况下——因为两个框架都会做大致相同的事情——我更喜欢在代码中编写/读取代码行数更少的框架。在你的情况下,我会(按照我的直觉)说双重转换比单一转换慢。但是json比二进制序列化的base64字符串更冗长,所以你需要考虑带宽是你的瓶颈还是cpu ...
  • @NathanDortman 除非数据在内部由文本内容主导,在这种情况下,json 可能比 (base-64)-of-(utf-8) 更有效

标签: serialization unity3d json.net protobuf-net


【解决方案1】:

好的,这是我的思考过程,希望能帮助您在两者之间做出决定:

在决定哪个更好之前,我们需要更好地了解问题的背景。优化总是必须在明确定义的“适应度”参数下完成的事情。 我的意思是:

  • 如果您最受 CPU 使用率的限制,我会测试看看哪些代码使用更多 CPU 来执行。
  • 如果带宽是个问题,您会想看看发送最小数据包的方法。 (在这种情况下,二进制序列化的 base64 应该是答案。)
  • 如果代码可读性是一个因素,您可能应该看看哪些代码更易于阅读/理解,同时编写的文本更少。 (在这种情况下,我怀疑 JSON 路由的可读性会更好)

一般来说,我会警告不要过度优化。主要是因为您可能会花更多时间思考和比较,而不是因为“未优化”代码而浪费时间:) 也就是说,只有当你能清楚地定义你的瓶颈时才进行优化。

希望这有帮助:)

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多