所以我一直在我的c ++项目中使用rapidjson,并且我已经找到了如何将它用于我的项目需求。但是在清理我的代码时,我看到我只是为缓冲区大小分配了一个随机数。
char readBuffer[80000];
rapidjson::FileReadStream readStream( file, readBuffer, sizeof( readBuffer ) );
是否有正确的方法来设置readBuffer需要的大小?
答案 0 :(得分:0)
FileReadStream
将一大块字节读入用户提供的缓冲区。通过使用此流概念,它不需要将整个JSON文件读入内存。
缓冲区大小可能会影响性能,但不会影响正确性。
“最佳”缓冲区大小取决于平台和应用程序。
如果尺寸太小,由于fread()
次呼叫次数增加,会产生更多开销。
用户通常可以使用程序堆栈(如示例所示)来处理此缓冲区,因此堆栈大小有限,因此不能太大。对于使用大量线程的某些嵌入式系统或应用程序,在堆栈上使用大缓冲区可能是一个更大的问题。
总有一些参数可能会影响性能。如果您的应用程序确实需要最佳性能,我认为最好的方法是进行实验。否则,我认为4096(大多数平台的页面大小)或以上就好了。
顺便说一句,RapidJSON是开源的,这个类非常简单。只需阅读此header file,您就会知道如何使用缓冲区。
P.S。使用vector<>
不是一个好习惯。由于vector<>
需要堆分配,因此这里只需要固定大小。使用程序堆栈更便宜。