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

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

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

当我关闭应用程序时,我将其置于以下位置:
public void Dispose()
{
    if (_mapAccessor != null)
        _mapAccessor.Dispose();

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

但是似乎我在这里正在执行的操作是终止内存映射文件,因为使用该内存映射文件的另一个程序开始获取 protected 内存错误。

如果我处置_map,即使它不是继承的所有权,它是否也会实际上破坏了内存映射文件?

更新

原来,另一个程序在我发出进入空闲模式的信号后立即进行了调皮的事情,该程序不受我的控制(在处置内存映射之前)。

当将“MemoryMappedFile.OpenExisting”与“HandleInheritability.None”一起使用时,处置后内存映射文件将不会被销毁。

最佳答案

不,处置通过调用OpenExisting()打开的MemoryMappedFile不会破坏基础MMF。

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

关于c# - 处置后保持MemoryMappedFile处于事件状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17002528/

10-16 09:52