我一直在我的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 是开源的,这个类非常简单。只需阅读此 头文件,您就会知道如何使用缓冲区。
顺便说一下,在这里使用vector<>
不是一个好的做法。因为vector<>
需要堆分配,而这里只需要固定大小。使用程序栈更加经济实惠。