我有一个问题。 我实际上想知道对驱动器进行写入大约需要多长时间。
当我执行以下操作时:
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 字节还是 16MB,我都得到几乎相同的测量值! 我确实希望看到巨大的差异。 我真的不想要确切的真实时间测量(当然,如果知道的话会很高兴);我所关心的只是看看我是否进行 KB 传输与 MB 传输在时间上存在一些差异。
有人知道任何其他函数可以让我粗略地测量 fwrite 函数的实际消耗时间吗?
最佳答案
问题是(在大多数操作系统上)所有对磁盘的写入都会首先写入内存缓存。仅当这些缓存页变得太旧(通常为 1 秒的数量级)时,它们才会真正写入磁盘。
写入内存缓存的速度非常快。如果需要对实际磁盘写入速度进行基准测试,则必须首先同步缓存。
一个可能有效的方法:
来自 unistd.h
的 syncfs()
。 man 2sync
表示此函数不一定要等待同步发生,但“从 Linux 1.3 开始,它实际上会等待”。
编辑:你没有说你使用的是 Windows :) 我对它不是很熟悉,但是快速谷歌搜索发现了 FILE_FLAG_NO_BUFFERING
和 FlushFileBuffers
WINAPI。看here , here和 here .
关于c++ - C fwrite 计算耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492262/