我有字幕/ 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