【问题标题】:JSON as an Encoding Protocol in a Large Distributed ApplicationJSON 作为大型分布式应用程序中的编码协议
【发布时间】:2023-03-25 07:49:01
【问题描述】:

我正在处理和报告大量基于行的可聚合数据的项目。有一个主要的聚合服务,然后有许多客户端可以从该服务器订阅不同的数据视图。对象在 Java 服务器和以 JSON 编码的 C# 客户端之间来回传递。我们注意到对象的解析需要大量时间并且有点占用内存。其他人是否为此使用过 JSON 或看到过类似的行为?

【问题讨论】:

  • 两种解析(即阅读)都是时间密集型的?还是两者中只有一个?它们是非常大的物体吗?你能把它们减少到最低限度吗?

标签: c# java json


【解决方案1】:

我们过去一直使用直接的 XML,并且不得不对很多对象使用自定义序列化(即手动)。虽然不是 JSON,但由于这个限制,我们确实有性能下降。一旦我们将所有技术迁移到类似的架构,我们就能够切换到效果更好的二进制序列化。

但是,对于因尺寸而存在性能问题的对象,我们进行了一些修改。由于我们可以访问两端的代码(并且都是 c#),因此我们能够对有效负载进行二进制序列化,然后对其进行 base64 编码,因为它必须是网络上的文本。它确实在对象大小方面有所帮助,并且序列化运行得更快。

由于您要从 Java 转到 C#,因此您不会真正拥有这种奢侈。因此,在您的情况下,我唯一能想到的就是尝试优化您对 JSON 响应的解析。您可以使用一些代码分析工具来帮助您识别导致性能问题的部分,然后尝试优化这些部分。此外,在反序列化为 JSON 时,请确保您使用字符串构建器来构建最终字符串。如果您正在执行标准的 concat 操作,它也会降低性能。

另外,你可能想看看我在网上看到的几个为 c# 编写的 JSON 序列化程序,有些可能比你正在做的更快,谁知道呢。

不确定这是否对您有太大帮助,但我们从基于字符串的消息传递中看到了一些信息。

更新:刚刚在 dotnetkicks 上看到:JSON.Net 这是 james 对 json.net 序列化程序的更新。可以帮忙。

【讨论】:

    【解决方案2】:

    我知道对于 java,有任意数量的开源 JSON 序列化器和反序列化器。我们使用FlexJSON

    【讨论】:

      【解决方案3】:

      JSON 的解码成本可能很高。如果性能是一个问题,请尝试使用 Hessian 之类的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-09
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多