在Dispose之后保持MemoryMappedFile存活

本文关键字:MemoryMappedFile 存活 Dispose 之后 | 更新日期: 2023-09-27 18:17:26

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

_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。用handleinheritable打开现有的。无:内存映射文件在处理后不会被销毁。

在Dispose之后保持MemoryMappedFile存活

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

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

相关文章:
  • 没有找到相关文章