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

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

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

最佳答案

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

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

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

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

09-20 22:52