2012-02-21 18 views
0

私は字幕/ srtファイルを持っています。データは2番目のものによって生成されています。私はそれらからデータを抽出し、テキストファイルに保存しようとしています while(1)ループでは、単純なテキストの読み取りと書き込み操作です。Cなぜtxtファイルの単純なfgetsは高いCPU使用量を消費しますか?

しかし、ファイルを通過するためにfgetsを使用すると、この単純な操作が非常に高いCPU使用率(トップコマンド参照)を引き起こしていることがわかりました。より多くのfgetsの数は、 CPU使用率を上回っています。

コードビット:私はSRT /字幕ファイル(ファイル1〜2 MB)、単純なテキストファイルのI/Oを読み取るためのfgetsを使用しています方法でいただきました!間違った理解カント

int convert_to_txt(FILE *f1, FILE *f2) { 

    static int str_len = 0; 
    char cap_nxt_tmp[128]; 

    while (fgets(cap_nxt_tmp, 128, f1) != NULL) { 

     fprintf(f2, "%s\n", cap_nxt_tmp); 
    } 
    return 0; 
} 

int main(int argc, char* argv[]) { 
    FILE *inputFilePtr; 
    FILE *outputFilePtr; 

    char inputPath[1024] = "storage/sample.srt"; 
    char outputPath[1024] = "storage/sample.txt"; 
    while (1) { 

     outputFilePtr = fopen(outputPath, "w"); 
     inputFilePtr = fopen(inputPath, "r"); 
     if (inputFilePtr == NULL || outputFilePtr == NULL) { 
      perror("Error"); 
     } 
     convert_to_txt(inputFilePtr, outputFilePtr); 
     fclose(inputFilePtr); 
     fclose(outputFilePtr); 
     // theres a break on an end condition lets say least run time is an hour. 
    } 
    return 0; 
} 

/読み取り操作は、CPU使用量を過度に消費すべきではありません。

pythonのような言語のこの基本ファイルI/Oは、2-3%のCPU使用量しか示していません。 しかし、これはcで約30%のCPU使用率を示しています。 スリープを使用せずにCPU使用量を減らすにはどうすればよいですか。 fgetsの代わりにCPUの量を減らす方法はありますか?

+0

ここで間違っているのは、あなたが終わりのないループでそれをやっているということです。あなたのプログラムは可能な限りハードに動作するでしょう。何かをブロックしなければ、できるだけ多くのCPU時間を吸うつもりです。 –

+0

while(1)は実際には "process end time"で中断されて終了します。これが1時間実行されると言うことができます。 –

答えて

3

ここに間違いや奇妙なことはありません。

あなたのメインのwhile(1)ループは決して止まりません。つまり、ファイルを何度も何度も変換しています。ファイルはOSによってキャッシュされるため、物理ドライブに実際にアクセスしているわけではありません。したがって、プログラムはほとんどすべてのCPU時間をstrlen(cap_nxt_tmp)に費やしており、CPU負荷が非常に高いことがわかります。

+0

プログラムは、解析する前にファイルが変更されるのを待つ必要があります。 – ydroneaud

+0

はい、これは単純なテキストファイル操作です。 Pythonで行われたのと同じことは、CPU使用率が非常に低いことです。私はどのように睡眠なしでこれの負荷を減らすことができます。 –

+1

@AdityaGameProgrammerより速い2つのプログラムのうち、どちらかを理解してください。 Cプログラムが1000個のファイルを処理するのにかかる時間を測定します。 pythonプログラムが1000ファイルを処理するのにかかる時間を測定します。必要な周波数にプログラムを調整します(睡眠中)。 CPU使用率が低いと、Pythonプログラムが高速であるとは限りません... – nos

関連する問題