我有一个FASTA文件,其中包含最多2000000个字符串[lines]的序列字符串。我编写的代码适用于较小的大小,但是当文件大小增加时,它会变慢(甚至比较小的文件速度慢)。令我感到困惑的是,为什么需要花费更多时间才能看到文件大小为100,000甚至是第一次迭代,在10,000的情况下非常有效。 例如:我为每次迭代都输入了printf语句。在10,000次第一次迭代的情况下需要2 ms。在100000字符串的情况下,即使第一次迭代将花费更多时间,然后2 ms打印,依此类推。为什么它会像那样缓慢?
请问您能帮助我如何提高效率,甚至以与小尺寸文件相同的速度工作?我正在逐行阅读。 我的代码是
#include "kseq.h"
KSEQ_INIT(gzFile, gzread)
int z=0;
fp = gzopen(dbFile, "r"); //Read database Fasta file into host memory
seq_d = kseq_init(fp);
while ((d = kseq_read(seq_d)) >= 0) {
unsigned char *b = (unsigned char *)malloc(sizeof(unsigned char) * 256);
memcpy(b, seq_d->seq.s, 256);
....
do work with b
....
............
z++
free(b);
}
kseq_destroy(seq_d);
gzclose(fp);
答案 0 :(得分:0)
我找到了这个问题。我之前没有注意到,但在我的代码中有两个实际运行到文件大小的循环而且不需要(这就是为什么我也得到每次迭代的可变时间)。我只是消除它们,现在它完美无缺。
答案 1 :(得分:0)
为了提高速度,您还可以在' while'之前移动malloc线,并在' while'结束后自由移动。