9

我需要访问一个共享内存映射文件(由一个单独的程序创建和拥有);为此,我正在使用

_map = MemoryMappedFile.OpenExisting(
            "buffer",
            MemoryMappedFileRights.ReadWrite, 
            HandleInheritability.None);

_mapAccessor = _map.CreateViewAccessor(0, 0, MemoryMappedFileAccess.ReadWrite);

当我关闭应用程序时,我对这些调用 dispose:

public void Dispose()
{
    if (_mapAccessor != null)
        _mapAccessor.Dispose();

    if (_map != null)
        _map.Dispose();
}

但似乎我在这里做的事情是杀死内存映射文件,因为使用它的其他程序开始出现受保护的内存故障。

如果我处理_map它是否真的破坏了内存映射文件,即使它不是继承的所有权?

更新

结果是另一个不受我控制的程序在我向它发出进入空闲模式的信号后(就在处理内存映射之前)正在做一些顽皮的事情。

当使用“MemoryMappedFile.OpenExisting”和“HandleInheritability.None”时,内存映射文件在处理后不会被破坏。

4

1 回答 1

3

不,释放通过调用 OpenExisting() 打开的 MemoryMappedFile 不会破坏底层 MMF。

调用 Windows API CreateFileMapping() 的进程控制 MMF 的生命周期,而 OpenExisting() 则调用 OpenFileMapping()。

于 2013-07-24T14:13:59.603 回答