cJSON库性能为什么这么差?

cJSON 的设计目标是尽可能地小巧和高效。它的代码库非常精简,只包含少量的文件,并且不依赖于其他外部库。这使得 cJSON 在嵌入式系统和资源受限的环境中具有很好的可用性,可以轻松地集成到各种应用中。

  1. 递归解析

cJSON 使用递归的方式解析 JSON 字符串,这意味着对于嵌套层次较深的 JSON 数据,解析时会涉及到多层递归调用。递归解析在某些情况下可能会导致性能问题,并且对于非常大的 JSON 数据可能会造成栈溢出。

其中,cJSON_parse、cJSON_Delete和cJSON_print内部都使用了递归处理JSON字符串。

2. 动态内存分配

cJSON 使用了动态内存分配来管理 JSON 数据结构的内存,这涉及到频繁的内存分配和释放操作。

3. 算法设计

cJSON 的算法设计不够高效,导致性能较低。例如,在查找和访问 cJSON 对象的属性时,cJSON 使用线性搜索的方式,而不是更快速的数据结构(如哈希表)进行查找。

比如cJSON_GetArraySize获取数组Size时,直接遍历了一遍链表,而没有记录该值。

我想cJSON的设计目标就决定了性能的上限,工作中有测试过另一个json库yyjson,对比cJSON,性能有着不小的提升。挖个坑,后面有时间看一下主流高性能的json库源码,再来这里补充cJSON的优缺点。

编辑于 2023-05-30 19:13 ・IP 属地北京

文章被以下专栏收录