ここでは、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
最終更新日