如何增加ofstream的缓冲区大小

时间:2015-04-21 15:52:25

标签: c++ buffer ofstream

我想增加c ++程序的缓冲区大小,以免它写得太频繁。默认缓冲区是8192字节,我试图用pubsetbuf将它增加到200K。

原始代码

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";
}

修改

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";
}

然而,从strace输出来看,它在改变之前和之后似乎没有什么区别。

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

我做错了什么?

0 个答案:

没有答案