C fwrite计算经过的时间

时间:2013-01-24 01:07:55

标签: c++ fwrite

我有一个问题。 我想实际上有一些大致需要花费多长时间来为驱动器做一个fwrite。

当我执行以下操作时:

clock_t begin = clock();
unsigned long long size_t = fwrite(send, 1, transfer_size*sizeof(unsigned long long), wpFile);
clock_t end = clock();
double long elapsed_secs = double long(end - begin) / CLOCKS_PER_SEC;

不幸的是,对于不同的传输大小,我没有得到任何不同的结果!!!

我的猜测是clock_t,一旦它发出一个fwrite命令,一些如何停止测量,当我已经完成fwrite时它会再次返回。 无论我的传输大小是32KB Byte还是16MB,我都会得到几乎相同的度量! 我确实期待看到巨大的差异。 我真的不想要真正的实时定时测量(一般情况下,它会很高兴知道);而我所关心的是看到我在做KB转移和MB转移时的时间差异。

是否有人知道任何其他函数会给我一些粗略的测量fwrite函数的实际时间?

1 个答案:

答案 0 :(得分:2)

问题在于(在大多数操作系统上)对磁盘的所有写入都首先写入内存缓存。只有当那些缓存页面太旧(通常为1秒的数量级)时,它们才会被写入磁盘。

对内存缓存的写入非常快。如果需要对实际磁盘写入的速度进行基准测试,则必须先同步缓存。

可能有效的方法: 来自syncfs()的{​​{1}}。 unistd.h表示此函数不一定等待同步发生,但“自Linux 1.3以来它确实等待”。

编辑:您没有说您使用的是Windows :)我对它不是很熟悉,但是快速谷歌搜索在WINAPI中显示man 2 syncFILE_FLAG_NO_BUFFERING。查看hereherehere