C#中的内存映射文件

时间:2014-02-13 14:11:47

标签: c# memory-mapped-files

我正在尝试将文件打开为内存映射文件,如下所示:

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的开发人员介绍了如何访问site中的数据。在他们的示例中,他们不使用任何互斥锁从文件创建MMF。也许同步是通过boost ??

完成的

他们建议将文件复制到另一个位置(我从中没有错误,顺便说一下),但这不会导致效率低下和其他类型的问题吗?

MSDN Site中,他们不会在持久化内存映射文件示例中使用互斥锁。但他们确实需要mmf的名称,我不知道(如果他们已经命名了)。

所以我的实际问题是:是否真的没有其他方法来访问数据,而不是每次更新文件时将文件复制到另一个位置,创建内存映射文件,然后进行数据处理?

最好的问候

0 个答案:

没有答案
相关问题