我有字幕/ srt文件,數據由第二個生成。我試圖從它們中提取數據,並在while(1)循環中將它們保存到文本文件 ,它是一個簡單的文本讀取和寫入操作。C爲什麼txt文件上的簡單fgets消耗高cpu使用量?
但我發現使用fgets來遍歷文件導致這個簡單的操作具有非常高的CPU使用率(頂級命令參考)。更多的fgets數量高於 cpu的使用量。
碼位:
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;
}
我無法理解什麼是錯在我使用與fgets讀SRT /字幕文件(每個文件1-2 MB),一個簡單的文本文件I/O方式/讀操作不應該消耗太多的CPU使用。
這個基本文件I/O在像python這樣的語言中只顯示2-3%的CPU使用率。 但這在c顯示約30%的CPU使用率。 如何在不使用睡眠的情況下減少CPU使用量。有更少的cpu替代fgets嗎?
這裏有什麼問題是你在一個永無止境的循環中做的。你的程序將盡可能地努力工作,除非它必須阻止某些事情,它會繼續吸取儘可能多的CPU時間。 – 2012-02-21 13:19:16
while(1)實際上終止於「進程結束時間」,並有一箇中斷。可以說這運行了一個小時。 – 2012-02-21 13:28:38