C fwrite 计算经过的时间
C fwrite calculating elapsed Time
我有一个问题。我想实际测量一下对驱动器进行重写需要多长时间。
当我执行以下操作时:
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 秒的数量级)时,它们才会真正写入磁盘。
对内存中缓存的写入速度非常快。如果需要对实际磁盘写入的速度进行基准测试,则必须先同步缓存。
一种可能有效的方法: syncfs()
来自unistd.h
. man 2 sync
说这个函数不一定等待同步发生,但"从 Linux 1.3 开始,它确实在等待"。
编辑:你没有说你正在使用Windows :)我对它不是很熟悉,但是在WINAPI中快速的谷歌搜索FILE_FLAG_NO_BUFFERING
和FlushFileBuffers
。看这里,这里和这里.
相关文章:
- 为什么根据测量位置测量经过的时间时会有很大的不同?
- 如何比较两个经过的时间?
- 为什么这个经过的时间(帧时间)计算会锁定我的游戏
- 获取标准::未来<T>::wait_for的经过时间
- C++ 时间机器无法正确计算经过的时间量
- 填充 unordered_map (c++) 后 malloc 的经过时间
- 自当地时间上午8点以来,将时间经过的时间与Boost
- 如何获得Microsoft TTS演讲的经过的时间
- 获取自C++执行以来经过时间的最干净,最简单的方法
- 在 Linux 中,非常高的经过(挂钟)时间和低系统时间的含义
- 16.66ms 帧时间.当 sleep() 只经过整毫秒时,你如何获得完美的 60 fps
- 以格式化字符串的形式获取经过的时间
- 如何在C++中检查经过的时间和分配的内存
- 在visualc++2010中经过的时间
- 如何在没有计时器的情况下确定经过了多少时间
- 如何获得自SFML中按下键以来经过的时间
- 两个时间之间经过的时间,格式为24小时hh:mm:ss
- 如何从steady_clock返回经过的时间作为原始数据类型(double)
- 查找经过的时间
- 在经过时间后做某事C++SFML 2