2017-05-25 30 views
-1

私は2000000文字列[行]までのシーケンス文字列を含むFASTAファイルを持っています。私は小さなサイズでうまくいくコードを書いたが、ファイルのサイズが大きくなるとそれは遅くなる(ファイルの速度が遅くなっても遅くなる)。私は、ファイルサイズが1万の場合に非常に効率的に実行される最初の反復でも、100,000であると考える理由は混乱しています。 例:私は繰り返しごとにprintf文を置く。 10,000回の最初の反復の場合、2ミリ秒かかる。 100000文字列の場合でも、最初の反復では印刷に2 ms以上かかる場合があります。なぜそんなに遅くなるの?パフォーマンス - C言語で行ごとに巨大なFASTAファイルを読み取る

小さいサイズのファイルと同じように効率を上げたり、同じスピードで動作させる方法を教えてください。私はそれを1行ずつ読んでいます。 私のコードは

#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

です。問題が見つかりました。私は前に気がつかなかったが、私のコードでは、実際にファイルのサイズまで実行され、必要ではない2つのループがあった。(なぜ、それぞれの繰り返しに対して可変時間を得たのか?私はちょうどそれらを排除し、今は完璧に動作します。

0

速度を改善するには、 'while'の前にmalloc行を移動し、 'while'の後に空きを移動することもできます。

関連する問題