处理后保持MemoryMappedFile活着

时间:2013-06-08 18:26:58

标签: c# winapi shared-memory

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

_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'一起使用时,处理后不会销毁内存映射文件。

1 个答案:

答案 0 :(得分:2)

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

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