How to increase buffer size of ofstream

淺唱寂寞╮ 提交于 2019-12-08 08:54:11

问题


I wanted to increase the buffer size of a c++ program so that it does not write too frequently. The default buffer is 8192 bytes, I tried to increase it to 200K with pubsetbuf.

The original code

ofstream fq(fastq1.cstr(), ios::out); // fastq1 is a file
BamReader reader;  // BamReader parses and reads in "bamFile" below
reader.Open(bamFile);
while (reader.GetNext()) {
    fq << bam.Name << "\n";
    fq << bam.seq << "\n";
    fq << bam.qual << "\n";
}

Modified

ofstream fq(fastq1.cstr(), ios::out); // fastq1 is a file with certain format
// setting buffer size to 200K
int buf_size = 204800;
char buf[buf_size];
fq.rdbuf()->pubsetbuf(buf, buf_size);

BamReader reader;  // BamReader parses and reads in "bamFile" below
reader.Open(bamFile);
while (reader.GetNext()) {
    fq << bam.Name << "\n";
    fq << bam.seq << "\n";
    fq << bam.qual << "\n";
}

However from the strace output it does not seem to make a difference before and after the change.

writev(3, [{"\n@C3A7DACXX140502:3:1209:20544:1"..., 8186}, {"ACCTCCTCCTGCTTTCACCTATCCCGCTTCAC"..., 76}], 2) = 8262
writev(4, [{"\n@C3A7DACXX140502:3:1209:20544:1"..., 8186}, {"GATCCTCGTCAGTCCTGAAGGAGTGTCAGCTT"..., 76}], 2) = 8262
writev(3, [{"\n+\nBA@CDEEEDEFEDBBDCDBDBCDCB@DDB"..., 8148}, {"??>ABEEECADDBBABBDCEBDCDCBECDBC@"..., 76}], 2) = 8224
writev(4, [{"\n+\n>>;ABCD@BEDFCDCDECCECCE?DADCE"..., 8148}, {">>;ABABBDDECEDECECCCECBBECCDDDFD"..., 76}], 2) = 8224
writev(3, [{"\n@C3A7DACXX140502:3:1209:20618:6"..., 8184}, {"TTGGAAGGCCAGGTCCAGTAACCGGCCCCATT"..., 76}], 2) = 8260
writev(4, [{"\n@C3A7DACXX140502:3:1209:20618:6"..., 8184}, {"ATTAGTAATTTCAGTGCCTCCTCCATCTTTAG"..., 76}], 2) = 8260
writev(3, [{"\n+\n?@>CCDFEEDDDCBDBDEBBCDB@CDBBB"..., 8148}, {"B@<DDDDFCEDEBBDDBDBDC@EBBECDDCEC"..., 76}], 2) = 8224
writev(4, [{"\n+\n>=;?C@?CBCCEDEAEDCDDBDDBDCDEB"..., 8148}, {">><A@BED@DDBDECBCBECCECDBDCDBEED"..., 76}], 2) = 8224
writev(3, [{"\n@C3A7DACXX140502:3:1209:20684:3"..., 8180}, {"ACCCAAATGAGATCTGTGTGCCAATGTCAGTG"..., 76}], 2) = 8256
writev(4, [{"\n@C3A7DACXX140502:3:1209:20684:3"..., 8180}, {"TCATCTGTGAACTCCACCAAGTTTTGTGCCTC"..., 76}], 2) = 8256
writev(3, [{"\n+\nBA@CCDDDFDFBBDDEBECEDBCCCEBDC"..., 8147}, {"BA?AEEEEECFDBDBBCCECCC?DBBDBDBEA"..., 76}], 2) = 8223
writev(4, [{"\n+\n>?=@BCE@EDDEEDBDDBDCEBBBBEBED"..., 8147}, {">?<ABCBBBEDECBCCDBDCDDECBBEBDDDD"..., 76}], 2) = 8223

What did I do wrong?

来源:https://stackoverflow.com/questions/29777214/how-to-increase-buffer-size-of-ofstream

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!