我正在将小程序从 PHP 重写为 C++。这个想法基本上是读取 SSD 上的 32Gb 文件并对其进行一些简单的操作。
我正在使用带有 x64 发行版的 Visual Studio 2012。PHP 是 5.3 32 位。
问题是 PHP 的读取速度比 C++ 高,这让我很困惑。PHP 约为 350 Mb/s,而 C++/ifstream 代码为 180 Mb/s。
代码真的很简单:
ifstream datafile("data.txt", ios::binary);
while(datafile.read((char*)buffer, data_per_chunk)) {
// do stuff;
我尝试了不同的缓冲区大小,最大为 16Mb,但差别不大。我还尝试通过 datafile.rdbuf()->pubsetbuf(...) 设置内部缓冲区,但它也没有任何区别。
关于如何在不恢复到古老的 C 级接口的情况下加快 ifstream 的速度,是否有任何提示?我想至少达到 PHP 的性能水平。也许一些花哨的预读/缓存设置或其他东西。
我知道内存映射文件可能会有所帮助,但更愿意调整 ifstream 的设置,如果考虑到文件明显大于物理 RAM 且大于 4Gb 即不适合潜在的 32 位构建,则可以保持简单.