查找文件操作的CPU使用率

查找文件操作的CPU使用率,c,linux,visual-studio,fopen,cpu-usage,C,Linux,Visual Studio,Fopen,Cpu Usage,我在我的C程序中使用了fopen、fclose、fseek等文件操作。我想知道我是否消耗了太多的CPU,基于此,我想进行优化。但是,我不确定如何计算每个函数(fopen、fclose等)的CPU使用率 即使没有可用的标准工具,任何计算它的建议都是有用的 该程序既可以在VisualStudio环境中运行,也可以在Linux环境中运行 提前谢谢 您可以使用如下时钟功能,该功能在时间内。h int main () { clock_t start_t, end_t, total_t; int i;

我在我的C程序中使用了fopen、fclose、fseek等文件操作。我想知道我是否消耗了太多的CPU,基于此,我想进行优化。但是,我不确定如何计算每个函数(fopen、fclose等)的CPU使用率

即使没有可用的标准工具,任何计算它的建议都是有用的

该程序既可以在VisualStudio环境中运行,也可以在Linux环境中运行


提前谢谢

您可以使用如下时钟功能,该功能在时间内。h

int main ()
{
 clock_t start_t, end_t, total_t;
 int i;

 start_t = clock();
 printf("Starting of the program, start_t = %ld\n", start_t);

 printf("Going to scan a big loop, start_t = %ld\n", start_t);
 for(i=0; i< 10000000; i++) {
 }
 end_t = clock();
 printf("End of the big loop, end_t = %ld\n", end_t);

 total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
 printf("Total time taken by CPU: %f\n", total_t  );
 printf("Exiting of the program...\n");

 return(0);
 }
int main()
{
时钟开始、结束、总计;
int i;
开始时间=时钟();
printf(“程序的启动,start\t=%ld\n”,start\t);
printf(“要扫描一个大循环,开始\u t=%ld\n”,开始\u t);
对于(i=0;i<10000000;i++){
}
end_t=时钟();
printf(“大循环的末尾,End\u t=%ld\n”,End\u t);
总时钟数=(双倍)(结束-开始)/每秒时钟数;
printf(“CPU占用的总时间:%f\n”,总时间);
printf(“程序退出…\n”);
返回(0);
}

许多编译器支持“分析”的概念,它可以为您提供在每个函数中花费的时间明细。例如,在gcc下,有选项-p和-pg,它们生成分析信息,这些信息可以用单独的程序prof和gprof进行分析。查找文件操作的CPU使用情况在术语上几乎是一个矛盾:虽然I/O操作确实使用了一点CPU资源,但这通常与花费在或等待上的时间相形见绌,实际的I/O设备(硬盘驱动器、串行端口、网络等)。进一步讲500所说的:有效地进行I/O涉及到一些折衷:您通常希望花费一些额外的CPU来进行看起来“低效”的额外缓冲操作,以便更好地分摊底层操作系统和I/O子系统的固定费用,以及存储介质本身。因此,如果(假设)评测显示您在
fread
中花费了大量的CPU时间,那么,如果替代方案的性能较差,则不一定意味着您不应该调用
fread
。此外,很难评测stdio调用。大部分工作通常由内部函数执行,这些函数的名称如
\u filbuf
,您不直接调用,甚至可能无法识别。另外,
getc
putc
(和
getchar
putchar
)通常是宏,而不是函数,因此分析不会单独捕获它们的时间。(您可以改用
fgetc
fputc
,这两个函数保证是函数,这意味着您可以对它们进行分析,但它们的性能可能会显著降低,因此您将无法达到目的。)