有没有办法加快频繁的文件写操作?的CFile

时间:2010-10-12 06:11:17

标签: c++ mfc cfile

我的任务是频繁地将小部分数据写入文件并保证。它是某种类型的日志系统,必须提供保证数据到磁盘的安全性和速度。我发现制动器出现在经常调用的Flush()函数中。所以,我决定摆脱它。

我使用了标志,禁止缓冲和缓存数据(osNoBuffer和writeThrough)。在此之后,据我所知,我可以在不使用flush()的情况下执行文件I / O操作(将数据写入文件)? 另一个问题。我怎么能理解数据肯定写入磁盘而没有缓存和缓冲? 它是做我想要的或者可能是加速频繁文件写操作的另一种方式吗?

1 个答案:

答案 0 :(得分:3)

flush()需要很长时间,正是因为它确立了您正在寻找的保证。文件通常写入磁盘,(可能)正在旋转生锈的磁盘。文件物理地分散在这些磁盘的表面上,将读/写磁头移动到正确的位置需要几毫秒。每秒50次冲洗意味着每次冲洗平均为20毫秒,这与您的磁盘机械性能接近。

如果没有刷新,您的写入将被合并,因此多次写入只需要读/写头的一次移动。甚至没有检查特定的标志,这必然意味着数据暂时处于危险之中。

仅在软件中,您永远不会知道数据是否真正写入磁盘。我们知道这是因为Sun在开发ZFS文件系统时进行的研究。事实证明,更便宜,更慢的磁盘是关于刷新,并在数据实际刷新之前返回。您将需要服务器级磁盘来保证这一点。

SSD在这方面表现相当不错。他们没有必要动态移动写头。因此,他们对冲洗的谎言就少了。