为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<>需要堆分配,而这里只需要一个固定的大小。使用程序堆栈更便宜。