c++ - C fwrite 计算耗时

标签 c++ 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 函数的实际消耗时间吗?

最佳答案

问题是(在大多数操作系统上)所有对磁盘的写入都会首先写入内存缓存。仅当这些缓存页变得太旧(通常为 1 秒的数量级)时,它们才会真正写入磁盘。

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

一个可能有效的方法: 来自 unistd.hsyncfs()man 2sync 表示此函数不一定要等待同步发生,但“从 Linux 1.3 开始,它实际上会等待”。

编辑:你没有说你使用的是 Windows :) 我对它不是很熟悉,但是快速谷歌搜索发现了 FILE_FLAG_NO_BUFFERINGFlushFileBuffers WINAPI。看here , herehere .

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

相关文章:

swift - 在 Swift Playground 中写入文件时出错

c++ - GCC相当于VC的浮点模型切换?

c++ - 如何在 C++ 的 System() Shell 脚本中使用逗号?

c++ - 在类中使用 Armadillo 矩阵

mysql - 数据库中的可变长度文件写入

c++ - 文件写入,不删除旧行?

c++ - 设备驱动程序内存缓冲区处理器缓存问题

c++ - 在 Visual Studio 中执行 MSI 命令

php - 将文本区域的内容保存到文件时,fwrite 不是 fwriting

c - 为什么 fwrite (with struct) 写入未知符号?