Гарантируется ли последовательная очистка данных в отображенном в памяти файле? - PullRequest
5 голосов
/ 22 июля 2010

Я пытаюсь реализовать механизм хранения файлов, который хранит несколько записей переменного размера в одном файле с гарантией того, что набор записей всегда можно будет восстановить в согласованное состояние, даже если система не удалась при аппаратный уровень.

Пока что каждая схема, которую я придумал, сводится к последовательной записи данных. Некоторая часть данных будет добавлена ​​в конец каждой записи, что подтверждает, что запись прошла успешно. Однако, если данные не обязательно записываются на диск последовательно при сбросе, возможно, что данные подтверждения будут записаны раньше данных контента.

Есть два очевидных способа обойти это, но оба нежелательны:

  1. Очистите содержимое, затем напишите подтверждение и очистите его. Добавление дополнительной промывки может ухудшить производительность.
  2. Включите контрольную сумму в подтверждение (потребуется прочитать содержимое, чтобы подтвердить его действительность).

Я использую C # в Windows (32- и 64-разрядной версии) и реализацию файла сопоставления памяти в .Net 4.0

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Это слишком низкий уровень и ОС, специфичная для C #.попробуйте использовать Windows API от C и очень внимательно прочитайте спецификации API.

0 голосов
/ 17 ноября 2010

Вы пытались использовать FileOptions.WriteThrough для основного файлового потока?Это может помочь, поскольку отключает буферизацию.Другие идеи заключаются в том, чтобы сохранить отдельный файл, содержащий подтверждения, в качестве последнего записанного смещения, если он не соответствует размеру вашего файла (например, из-за перебоя в питании), вы можете просто обрезать его до этого размера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...