【发布时间】:2013-01-24 01:07:54
【问题描述】:
我有一个问题。 我实际上想大致了解一下对驱动器进行 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 功能所用的实际时间?
【问题讨论】:
-
写入 16MB 可能需要不到 1 秒的时间,特别是如果您的操作系统正在执行任何形式的磁盘缓存...
-
您的
fwrite调用是否可能是异步的?快速的 Google 搜索表明可能是这样,并且可能需要调用fflush以确保在您转到下一个功能(停止计时器)之前实际写入了所有数据。 -
@nosuchthingasstars
fflush实际上是否强制将脏页写入磁盘?据我了解,flush 仅保证更改对其他读者可见。操作系统对其页面缓存的处理应该不受影响。我错了吗? -
来自 cplusplus.com 文档:“如果给定流已打开以进行写入(或者如果它已打开以进行更新并且最后的 i/o 操作是输出操作)其输出缓冲区中的任何未写入数据被写入文件。”至于操作系统具体做什么,老实说我不确定。