私は字幕/ 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の量を減らす方法はありますか?
ここで間違っているのは、あなたが終わりのないループでそれをやっているということです。あなたのプログラムは可能な限りハードに動作するでしょう。何かをブロックしなければ、できるだけ多くのCPU時間を吸うつもりです。 –
while(1)は実際には "process end time"で中断されて終了します。これが1時間実行されると言うことができます。 –