我有一个FASTA文件,其中包含多达2000000个字符串[行]的序列字符串。我编写的代码适合较小的文件,但是当文件的大小增长时,文件的速度会变慢(甚至比较小的文件速度更慢)。我感到困惑的是,为什么文件大小看起来需要更多时间才能达到10万次,即使是在第一次迭代中,如果是10,000次,它的运行效率也非常高。例如:我为每次迭代都放了printf语句。在第一次迭代10,000的情况下需要2 ms。在100000个字符串的情况下,即使第一次迭代需要更多时间,然后2毫秒才能打印等等。为什么它可能会这样慢?性能 - 在C中逐行读取巨大的FASTA文件C
你能帮我提高效率吗?甚至可以像使用较小尺寸的文件一样以相同的速度工作?我正在逐行阅读。 我的代码是
#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);
您描述的缩放行为的种类似乎合理,但您提供的代码片段不能解释它。如果您希望我们帮助解决问题,您需要提供[mcve]。 –