重用 JSONDecoder 还是在每次请求时重新创建它?

Reusing JSONDecoder or recreating it on every request?

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

Apple 文档说 JSONDecoder class 是可重用的,但他们没有进一步详细说明。

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

On Apple platforms、JSON解码器依赖于JSON序列化进行初始解析,然后创建一个新的__JSONDecoder(内部class)以实际做解码。它传递一个 _Options,这是一个结构,所以它被复制了。因此,只要您不更改选项(这不是线程安全的),线程之间就不应该有任何交互。

因此,重用同一个解码器可能稍微便宜一些,因为它避免了分配和取消分配 class 实例,这 通常 胜过仅保留和释放一个 class 实例(我希望这里是这种情况)。但我希望与 JSON 解码的更大成本相比,差异非常非常小。

事实上,如果我遇到的情况确实值得分析(并且您需要对其进行分析以了解它是否更快),我会问 "why in the world am I decoding this many different JSON messages this quickly?" 这是否重要,JSON 可能不会来自网络或磁盘(这些速度太慢以至于使一个额外的 class 分配变得毫无意义)。仅当您正在处理 JSON 已经在内存中的大量小消息时才有意义。在那种情况下,答案几乎肯定是 "stop using JSON for that problem."

但我预计在几乎所有情况下,这都无关紧要,我肯定不会主动优化它。实现代码中更清晰的那个。然后分析代码以查看瓶颈所在。