【发布时间】:2021-07-30 14:12:18
【问题描述】:
我有这个简单的 C++ 代码,用于将图像加载到缓冲区中。
FILE *f = fopen("myimage.jpg", "rb");
fseek(f,0,SEEK_END);
unsigned long fsize = ftell(f);
rewind(f);
unsigned char *buf = new unsinged char[size];
fread(buf, 1, fsize, f);
fclose(f);
我使用 HDD 中约 1MB 的大文件进行测试,执行时间通常在 100 - 200 毫秒之间。这对我来说似乎太多了。我已经对我的硬盘进行了基准测试,读取速度约为 80 MB/s。这意味着读取 1MB 文件需要 1000/80 = 12.5 毫秒,对吧?真的可以在这样的时间读取文件吗?我的代码有什么问题吗?
【问题讨论】:
-
你如何衡量执行时间?
-
打开/关闭文件和分配内存会产生开销。
-
你也是打开和关闭文件,需要查阅文件目录,涉及到head seeks。
-
Visual Studio 中有一个标准分析器,它在每一步都显示自上次以来经过了多少毫秒。使用它来更好地理解您的代码。
-
这意味着读取 1MB 文件需要 1000/80 = 12.5 毫秒 没有一个硬盘驱动器寻道可能如此多或更长.
标签: c++ io hard-drive