c – 哪个更快,将原始数据写入驱动器或写入文件?
我需要将数据写入驱动器.我有两个选择:
>写入原始扇区(_ write(handle,pBuffer,size);) 哪种方式更快? 我预计原始部门的写作功能_write会更有效率.但是,我的测试结果失败了! fwrite更快. _write花费更长的时间. 我粘贴了我的代码段也许我的代码是错误的.你能帮我吗?无论哪种方式都可以,但是我认为原始写入更好,因为看起来驱动器中的数据至少加密了…. #define SSD_SECTOR_SIZE 512 int g_pSddDevHandle = _open("\.G:",_O_RDWR | _O_BINARY,_S_IREAD | _S_IWRITE); TIMER_START(); while (ulMovePointer < 1024 * 1024 * 1024) { _write(g_pSddDevHandle,szMemZero,SSD_SECTOR_SIZE); ulMovePointer += SSD_SECTOR_SIZE; } TIMER_END(); TIMER_PRINT(); FILE * file = fopen("f:test.tmp","a+"); TIMER_START(); while (ulMovePointer < 1024 * 1024 * 1024) { fwrite(szMemZero,SSD_SECTOR_SIZE,1,file); ulMovePointer += SSD_SECTOR_SIZE; } TIMER_END(); TIMER_PRINT(); 解决方法
在_write()情况下,SSD_SECTOR_SIZE的值很重要.在fwrite情况下,每个写入的大小实际上是BUFSIZ.要获得更好的比较,请确保底层缓冲区大小相同.
但是,这可能只是其中的一部分. 在fwrite情况下,您正在测量可以将数据存入内存的速度.您尚未将stdio缓冲区刷新到操作系统,并且尚未要求操作系统将其缓冲区刷新到物理存储.要更准确地比较,您应该在停止计时器之前调用fflush(). 如果您真的关心将数据存入磁盘,而不是仅将数据存入操作系统缓冲区,则应在确定计时器之前确保调用fsync()/ FlushFileBuffers(). 其他明显差异: >驱动器是不同的.我不知道有多不同. 我怀疑你看到一个不同的政策,实际上有多快得到的磁盘.原始磁盘的性能可以非常快,但是您需要大量写入,最好是多个并发的未完成的操作.您也可以通过在打开句柄时使用正确的选项来避免缓冲区复制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |