ios - 重用 JSONDecoder 或在每个请求上重新创建它?
问题描述
在异步环境中,为所有请求使用一个 JSONDecoder 是否更有效(如果多个线程正在等待锁定,可能会导致延迟)还是为每个新请求创建一个新的 JSONDecoder 更有效?
Apple 文档说 JSONDecoder 类是可重用的,但他们没有进一步详细说明。
https://developer.apple.com/documentation/foundation/jsondecoder
解决方案
在 Apple 平台上,JSONDecoder 依赖 JSONSerialization 进行初始解析,然后创建一个新的 __JSONDecoder(内部类)来实际进行解码。它传递了一个 _Options,它是一个结构,所以它被复制了。因此,只要您不更改选项(这不是线程安全的),线程之间就不应该有任何交互。
因此,重用相同的解码器可能会稍微便宜一些,因为它避免了分配和释放类实例,这通常比保留和释放类实例更胜一筹(我希望这里会是这种情况)。但我预计与 JSON 解码的更大成本相比,差异会非常非常小。
事实上,如果我遇到这种情况实际上值得分析(并且您需要分析它以了解它是否更快),我会问“我到底为什么要解码这么多不同的 JSON 消息?迅速地?” 为此,JSON 可能不会来自网络或磁盘(这些速度非常慢,以至于让一个额外的类分配毫无意义)。仅当您在处理大量小消息中已经存在于内存中的 JSON 时才有意义。在这种情况下,答案几乎肯定是“停止使用 JSON 来解决这个问题”。
但我希望在几乎所有情况下,这都无关紧要,我绝对不会主动优化它。实现代码中更清晰的那个。然后分析代码以查看您的瓶颈在哪里。
推荐阅读
- android - 与前台服务反应本机 - handleWindowVisibility:令牌 android.os.BinderProxy 没有活动
- java - java中的Json响应比较忽略json数组中的排序
- android - 我无法将参数类型“void Function(bool)”分配给参数类型“void Function(bool?)?”
- mysql - 获取mysql查询中两个日期列之间的最高日期
- variables - 如何在 Ansible 中读取多行变量中的行数
- mongodb - 如何在spring mongo中获得最后一条记录?
- regex - 正则表达式与逻辑 OR 不匹配
- javascript - Onesignal JS API - 根据用户兴趣发送通知?
- c - 你能发现我在 Karatsuba 算法的 C 实现中犯的错误吗
- python - 点击后等待数据表加载/ Selenium