Отображенный в память файл в 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 они не используют мьютекс в примерах файлов с постоянной памятью. Но им нужно имя ММФ, которого я не знаю (если они его назвали).

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

С уважением

0 ответов

Другие вопросы по тегам