在将数据保存到磁盘时,FlushFile和CloseHandle以及CreateFile一样好吗?

soi*_*oid 5 delphi winapi

对于磁盘上的文件,Win32函数FlushFileBuffers是否可靠,确定使用CloseHandle关闭文件然后使用CreateFile重新打开文件?

是否存在CloseHandle然后CreateFile更好的情况,因为当FlushFileBuffers没有时,它们正确地将数据保存到磁盘?

Han*_*ant 7

更好的是,CloseHandle()不会刷新文件系统缓存写入缓冲区.请注意成本,将数据传输到磁盘可能需要很长时间.CreateFile的FILE_FLAG_NO_BUFFERING选项允许您避免刷新.但由于书面数据的限制,它非常昂贵且难以正确使用.

  • 我在普通 PC 和硬盘驱动器上每秒收到 120 次 FlushFileBuffer 调用。如果 OPEN_EXISTING 和 CREATE_ALWAYS FILE_ATTRIBUTE_NORMAL,我可以以每秒 75,000 和 33,000 的速度 CloseHandle 和 CreateFile。对于 CREATE_ALWAYS(FILE_ATTRIBUTE_NORMAL 或 FILE_FLAG_WRITE_THROUGH),它下降到 5,000。 (2认同)