C# 在处理后使内存文件保持活动状态

C# 在处理后使内存文件保持活动状态,c#,winapi,shared-memory,C#,Winapi,Shared Memory,我需要访问共享内存映射文件(由单独的程序创建和拥有);为了做到这一点,我正在使用 _map = MemoryMappedFile.OpenExisting( "buffer", MemoryMappedFileRights.ReadWrite, HandleInheritability.None); _mapAccessor = _map.CreateViewAccessor(0, 0, MemoryMappedFile

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

_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();
}
但我在这里做的似乎是删除内存映射文件,因为使用该文件的其他程序开始出现受保护的内存错误

如果我处置
\u映射
,它是否确实会销毁内存映射文件,即使它不是继承的所有权

更新

原来另一个程序,不在我的控制之下,在我发出信号让它进入空闲模式(在处理内存映射之前)后,正在做一些不正常的事情


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

否,处理通过调用OpenExisting()打开的MemoryMappedFile不会破坏底层MMF


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

否,处理通过调用
OpenExisting()打开的MemoryMappedFile将不会破坏基础MMF。调用Windows API的进程
CreateFileMapping()
控制MMF的生存期,而
OpenExisting()
则调用
OpenFileMapping()
。您最好关注MMF的内容和使访问MMF安全的所需同步对象。你似乎没有任何这样的同步是一个相当大的危险信号。顺便说一句,你是对的,汉斯,问题不在于内存映射,而在于另一个程序(不是我的)对一个驱动程序做了一些调皮的事情,在我发出进入空闲模式的信号后。@MatthewWatson你能粘贴你的评论作为回答吗?我会接受。@MeirionHughes好的,完成。:)