我有个问题。
我实际上想对将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字节还是16MB,我都能得到几乎相同的度量!
我确实期望看到巨大的差异。
我真的不想要确切的实际计时量度(当然,很高兴知道);而我所关心的只是看时间是在进行KB传输还是进行MB传输。

是否有人知道其他函数,这些函数可以粗略估计fwrite函数的实际运行时间?

最佳答案

问题是(在大多数OS上)所有对磁盘的写入都首先写入内存中的缓存。仅当这些高速缓存页太旧(通常为1秒的数量级)时,它们才会实际写入磁盘。

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

一种可行的方法:syncfs()中的unistd.hman 2 sync表示此功能不一定要等待同步发生,而是“因为Linux 1.3确实会等待”。

编辑:您不是说您正在使用Windows :)我不是很熟悉它,但是快速的Google搜索在WINAPI中打开了FILE_FLAG_NO_BUFFERINGFlushFileBuffers。看hereherehere

关于c++ - C fwrite计算耗时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14492262/

10-12 23:51