
ここでは、ofstreamのバッファを増やして、書き込み性能を向上させてみる。
ofstreamのバッファはrdbufでアクセスできる。
char buf[bufsize];
でバッファを確保し、
pubsetbuf(buf,bufsize)
でバッファをセットする。
下記は、10MB分ファイルに書き込むプログラムである。
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
const int bufsize=1000000;
char buf[bufsize];
ofstream os;
os.rdbuf()->pubsetbuf(buf,bufsize);
os.open ("test.txt",ios::out);
for (int i=0;i<10000000;i++)
{
os<<"a";
}
os.close();
return 0;
}
この実行は、バッファを大きくとったため、ほぼ一瞬で終わる。
$ time ./a.out
real 0m0.274s
user 0m0.260s
sys 0m0.020s
一方、バッファを小さくとると、
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
const int bufsize=2;
char buf[bufsize];
ofstream os;
os.rdbuf()->pubsetbuf(buf,bufsize);
os.open ("test.txt",ios::out);
for (int i=0;i<10000000;i++)
{
os<<"a";
}
os.close();
return 0;
}
下記のように非常に長い時間がかかることがわかる。
$ time ./a.out
real 0m10.258s
user 0m1.190s
sys 0m9.050s