为rapidjson-readBuffer设置适当的大小
Setting a proper size for rapidjson readBuffer
本文关键字:rapidjson-readBuffer 设置 更新时间:2023-10-16
所以我一直在我的一个c++项目中使用rapidjson,我已经找到了如何将其用于我的项目需求。但在清理代码时,我发现我只是为缓冲区大小分配了一个随机数。
char readBuffer[80000];
rapidjson::FileReadStream readStream( file, readBuffer, sizeof( readBuffer ) );
有没有合适的方法来设置readBuffer需要多大?
FileReadStream
为每个内部迭代将一块字节读取到用户提供的缓冲区中。通过使用这个流概念,它不需要将整个JSON文件读取到内存中。
缓冲区大小可能会影响性能,但不会影响正确性。
"最佳"缓冲区大小取决于平台和应用程序。
如果大小太小,由于fread()
调用的数量增加,它将产生更多的开销。
通常,用户可能会使用程序堆栈(如您的示例中所示)作为这个缓冲区,所以它也不能太大,因为堆栈大小是有限的。对于一些使用大量线程的嵌入式系统或应用程序来说,在堆栈上使用大缓冲区可能是一个更大的问题。
总有一些参数可能会影响性能。如果您的应用程序确实需要最佳性能,我认为最好的方法是进行实验。否则,我认为4096(大多数平台的页面大小)或以上就可以了。
顺便说一句,RapidJSON是开源的,这个类非常简单。只要阅读这个头文件,你就会知道缓冲区是如何使用的。
附言:在这里使用vector<>
不是一个好的做法。因为vector<>
需要堆分配,而这里只需要一个固定的大小。使用程序堆栈更便宜。
相关文章:
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 为什么 rapidjson 无法获取此整数值
- Rapidjson 遍历并获取复杂 JSON 对象成员的值
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 我正在尝试从 GMocked 类返回一个 rapidjson::值,但我似乎无法让它工作
- 用rapidjson读取子对象向量
- C++引用 RapidJSON 返回
- RapidJSON 文档创建嵌套对象
- 如何使用 rapidjson 读取 json 文件并输出到 std::string?
- 在C++中使用 RapidJSON 访问 JSON 数组的字段
- 通过索引访问 rapidjson::D ocument array
- 使用 rapidjson 比较 c++ 中的 json 值
- 从 Rapidjson 值转换为 Rapidjson 文档
- 使用RapidJson在C 中解析一系列对象
- protobuf与rapidjson数据格式
- 使用 rapidjson 直接在文件中保存 json
- 替换 rapidjson 中成员的值
- C++ RapidJson 帮助反序列化数组对象
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象