我正在尝试将文件打开为内存映射文件,如下所示:
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的名称,我不知道(如果他们已经命名了)。
所以我的实际问题是:是否真的没有其他方法来访问数据,而不是每次更新文件时将文件复制到另一个位置,创建内存映射文件,然后进行数据处理?
最好的问候