如何加快写入档案

时间:2016-11-30 22:18:55

标签: fwrite

在Gnuradio块中,我有一个触发器,它应该开始将数据写入文件一段时间。在"工作"函数写作部分出现在这段代码中:

if(counter!=0){
    ...
    if(trigger==1){
        counter = num_of_samples;
        of = fopen(filename,"ab");
        setbuf(of,buffer);
    }
    ...
}else{//Write to file occurs here.
    fwrite(i0,sizeof(float),1,of);
    fwrite(q0,sizeof(float),1,of);
    fwrite(i1,sizeof(float),1,of);
    fwrite(q1,sizeof(float),1,of);
    counter --;
    if(counter == 0){
        fflush(of);
        fclose(of);
    }
}

意图是" num_of_samples"次数,4个浮点输入以二进制形式写入" filename"指定的某个文件的末尾。

这样可以正常工作,但问题是大量数据(例如200 MB),此过程大约需要10分钟才能完成所有写入操作。如果我正在编写少量数据,例如300个样本,它会很快发生,所以我认为问题出现在" else"部分代码,因为这是在更大的循环运行时运行的。

我知道有一种写法比这更快,因为当使用" file_sink"在Gnuradio中阻塞,它使用相同的fwrite函数,它可以在瞬间写入大量数据。但由于某种原因,这段代码要慢得多。(有一个" tagged_file_sink"块基本上可以完成这段代码应该做的事情,但它有一个让我无法使用的错误,所以我需要写我自己的。)

我可以更快地将数据写入文件吗?

0 个答案:

没有答案