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