为rapidjson readBuffer设置合适的大小

时间:2014-11-13 05:32:31

标签: c++ visual-studio rapidjson

所以我一直在我的c ++项目中使用rapidjson,并且我已经找到了如何将它用于我的项目需求。但是在清理我的代码时,我看到我只是为缓冲区大小分配了一个随机数。

char readBuffer[80000]; rapidjson::FileReadStream readStream( file, readBuffer, sizeof( readBuffer ) );

是否有正确的方法来设置readBuffer需要的大小?

1 个答案:

答案 0 :(得分:0)

对于每次内部迭代,

FileReadStream将一大块字节读入用户提供的缓冲区。通过使用此流概念,它不需要将整个JSON文件读入内存。

缓冲区大小可能会影响性能,但不会影响正确性。

“最佳”缓冲区大小取决于平台和应用程序。

如果尺寸太小,由于fread()次呼叫次数增加,会产生更多开销。

用户通常可以使用程序堆栈(如示例所示)来处理此缓冲区,因此堆栈大小有限,因此不能太大。对于使用大量线程的某些嵌入式系统或应用程序,在堆栈上使用大缓冲区可能是一个更大的问题。

总有一些参数可能会影响性能。如果您的应用程序确实需要最佳性能,我认为最好的方法是进行实验。否则,我认为4096(大多数平台的页面大小)或以上就好了。

顺便说一句,RapidJSON是开源的,这个类非常简单。只需阅读此header file,您就会知道如何使用缓冲区。

P.S。使用vector<>不是一个好习惯。由于vector<>需要堆分配,因此这里只需要固定大小。使用程序堆栈更便宜。