Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C fwrite计算运行时间_C++_Fwrite - Fatal编程技术网

C++ C fwrite计算运行时间

C++ C fwrite计算运行时间,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_

我有个问题。 我想实际测量一下对一个驱动器进行写操作大概需要多长时间

当我执行以下操作时:

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;
不幸的是,对于不同的传输大小,我没有得到任何不同的结果

我的猜测是,时钟一旦发出一个fwrite命令,就会停止它的测量,当我已经完成fwrite时,它又回来了。 无论我的传输大小是32KB字节还是16MB,我都得到了几乎相同的度量! 我真的希望看到巨大的不同。 我真的不想要确切的实时测量(当然,知道这个会很好);我所关心的只是看看我是在做KB传输还是在做MB传输,在时间上有什么不同

是否有人知道有任何其他函数可以粗略测量fwrite函数的实际运行时间?

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

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

一种可能有效的方法:
syncfs()
来自
unistd.h
man2sync
表示,此函数不一定要等待同步发生,但“因为Linux 1.3,它实际上是在等待”


编辑:你没有说你在使用windows:)我不太熟悉它,但是在WINAPI中出现了一个快速的google搜索
FILE\u FLAG\u NO\u BUFFERING
FlushFileBuffers
。看,还有。

可能16MB的写入时间不到1秒,特别是当您的操作系统正在进行任何形式的磁盘缓存时……您的
fwrite
调用是否可能是异步的?谷歌快速搜索表明可能是这样,可能需要调用
fflush
,以确保在进入下一个函数(停止计时器)之前,所有数据都已写入。@nosuchingasstars
fflush
是否确实强制将脏页写入磁盘?据我所知,flush只保证其他读者可以看到更改。操作系统对页面缓存的操作不应受到影响。我错了吗?在cplusplus.com文档中:“如果给定的流是为写入而打开的(或者如果它是为更新而打开的,并且最后的I/o操作是一个输出操作),那么它的输出缓冲区中任何未写入的数据都会写入文件。”至于操作系统具体做什么,我真的不确定。磁盘也有缓存。所以这需要考虑到,;此外,还要考虑后台运行的程序。例如,Adobe Acrobat可能正在检查升级以及Windows。可能您有网络ping或音乐播放。看起来sync是一个系统调用。它是?有C++同步功能吗?windows的同步功能是什么。看起来sync是一个unix系统调用@Rudy01我对windows不太了解,但看看我在答案中添加的链接。