Отображенный в память файл в C#
Я пытаюсь открыть файл в виде файла с отображением в памяти следующим образом:
using (var mmf = MemoryMappedFile.CreateFromFile(newDataFilePath, FileMode.OpenOrCreate, "myTestMap"))
{
// (bytesPerImage * numCameras) * 0 --> raw data
// (bytesPerImage * numCameras) * 2 --> segmented left hand
// (bytesPerImage * numCameras) * 3 --> segmented right hand
using (var accessor = mmf.CreateViewAccessor((bytesPerImage * numCameras) * 0, bytesPerImage, MemoryMappedFileAccess.Read))
{
here comes the reading and processing of the data
}
}
Я получаю сообщение об ошибке: процесс не может получить доступ к файлу, потому что он используется другим процессом.
Теперь, разве не весь смысл отображенных в память файлов для обмена данными между различными процессами?
Из других постов я читал, что вам все равно нужно синхронизировать доступ к данным. Таким образом, вы должны использовать мьютекс как для процесса, который его создает, так и для процесса, который его читает.
Моя проблема в том, что создание этого файла не находится под моим контролем. Он создан с помощью API, который я использую в своем проекте. Я не могу сказать API, чтобы создать его в режиме совместного использования или назвать файл, чтобы я мог использовать MemoryMappedFile.OpenExisting
,
Разработчики API описывают, как получить доступ к данным на своем сайте. В их примере они не используют мьютекс для создания MMF из файла. Может быть синхронизация сделана бустом??
Они рекомендуют скопировать файл в другое место (откуда я не получаю ошибки, кстати), но не приведет ли это к неэффективности и, возможно, к другим проблемам?
На сайте MSDN они не используют мьютекс в примерах файлов с постоянной памятью. Но им нужно имя ММФ, которого я не знаю (если они его назвали).
Итак, мой актуальный вопрос: действительно ли нет лучшего способа получить доступ к данным, чем копировать файл в другое место каждый раз, когда он обновляется, создавать файл с отображенной памятью, а затем выполнять обработку данных?
С уважением