内存映射文件中的数据是否保证按顺序刷新?

时间:2010-07-21 21:58:19

标签: paging recovery memory-mapped-files

我正在尝试实现一种文件存储机制,该机制在单个文件中保存大量可变大小的记录,并保证记录集始终可以恢复到一致状态,即使系统在一个文件中失败也是如此。硬件水平。

到目前为止,我提出的每个方案都是按顺序编写数据的。某些数据将附加到每条记录的末尾,以确认写入成功。但是,如果数据在刷新时不必按顺序写入磁盘,则可以在内容数据之前写入确认数据。

有两种明显的方法,但两者都是不可取的:

  1. 刷新内容,然后写下确认并冲洗。添加额外的刷新可能会降低性能。
  2. 在确认中包含校验和(需要阅读内容以确认其有效)。
  3. 我在Windows上使用C#(32位和64位)和.Net 4.0的内存映射文件实现

2 个答案:

答案 0 :(得分:1)

这是C#的特定操作系统级别太低。尝试使用C语言中的Windows API,并仔细阅读API规范。

答案 1 :(得分:0)

您是否尝试在基础文件流上使用FileOptions.WriteThrough?这可能会有所帮助,因为它会禁用缓冲。其他想法是将包含确认的单独文件保留为最后写入的偏移量,如果它与您的文件大小不匹配(例如由于断电),您可以简单地截断它做那么大小