重用JSONDecoder还是在每个请求上都重新创建它?

时间:2019-02-20 13:28:43

标签: ios swift jsondecoder

在异步环境中,对所有请求使用一个JSONDecoder效率更高(如果多个线程正在等待锁,可能会导致延迟),或者为每个新请求创建一个新的JSONDecoder效率更高?

Apple文档说JSONDecoder类是可重用的,但不再赘述。

https://developer.apple.com/documentation/foundation/jsondecoder

1 个答案:

答案 0 :(得分:5)

On Apple platforms,JSONDecoder依靠JS​​ONSerialization进行初始解析,然后创建一个新的__JSONDecoder(内部类)来实际执行解码。它传递一个_Options(它是一个结构),因此将其复制。因此,只要不更改选项(线程不安全),线程之间就根本不应该有任何交互。

因此,重用相同的解码器可能会稍微便宜一些,因为它避免了分配和取消分配类实例,这通常是保留和释放类实例的胜利(通常,我希望这样做)就是这种情况)。但是我希望与JSON解码的成本相比要大得多。

实际上,如果我遇到的情况实际上值得分析(并且您需要对其进行概要分析以了解它是否更快),我会问“为什么我要解码这么多不同的东西? JSON消息这么快?”为此,JSON可能不会来自网络或磁盘(它们是如此之慢,以至于无法进行额外的类分配)。仅当您正在工作的JSON中存在大量小消息时,这才有意义。在那种情况下,答案几乎肯定是“停止使用JSON解决该问题。”

但是我希望在几乎所有情况下,这都没有关系,而且我绝对不会主动对其进行优化。实现您的代码中更清晰的一个。然后分析代码以查看瓶颈所在。