2017-05-25 123 views
-1

我有一個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); 
+0

您描述的縮放行爲的種類似乎合理,但您提供的代碼片段不能解釋它。如果您希望我們幫助解決問題,您需要提供[mcve]。 –

回答

0

我已經找到了問題。我之前沒有注意到,但在我的代碼中有兩個實際運行到文件大小並且不需要的循環(這就是爲什麼我也爲每次迭代獲得了可變時間)。我只是消除他們,現在它工作完美。

0

爲了提高速度,您還可以在'while'之前移動malloc行,在'while'之後結束後自由移動。