cJSON库性能为什么这么差?
cJSON 的设计目标是尽可能地小巧和高效。它的代码库非常精简,只包含少量的文件,并且不依赖于其他外部库。这使得 cJSON 在嵌入式系统和资源受限的环境中具有很好的可用性,可以轻松地集成到各种应用中。
- 递归解析
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的优缺点。