多个内存映射文件是否有问题?

Are multiple memory mapped files bugged?

将第二个内存映射文件添加到我的项目时,第一个不再跨进程工作。

Imports System.IO.MemoryMappedFiles

Module IPC
    Private ReadOnly _QlCtxOpen As MemoryMappedViewAccessor = MemoryMappedFile.CreateOrOpen("IPC_QlCtxOpen", 1).CreateViewAccessor()
    Public Property IsQlCtxOpen As Boolean
         Get
            Dim value As Boolean = _QlCtxOpen.ReadBoolean(0)
            Debug.Print($"QlCtxOpen {value}")
            Return value
        End Get
        Set(ByVal value As Boolean)
            _QlCtxOpen.Write(0, value)
            Debug.Print($"set QlCtxOpen to {value}")
        End Set
    End Property
End Module

将以下行添加到模块时,第一个 mmf 仍在同一个进程中工作,但第二个进程将不再能够读取正确的值。

Private ReadOnly _alreadyOpenPID As MemoryMappedViewAccessor = MemoryMappedFile.CreateOrOpen("IPC_alreadyOpenPID", 4).CreateViewAccessor()

我知道我应该使用互斥锁进行写入,但在我的项目中,写入是由鼠标操作触发的,因此只有 1 个进程会同时使用它。

我不明白我做错了什么来破坏第一个 mmf,它有效 w/o 第二个 mmf。

我正在使用 Microsoft Visual Studio Community 2019 版本 16.11.11 .NET Framework 4.7.2

原来垃圾收集是这里的罪魁祸首。 要解决此问题,只要您需要其他进程读取该值,请确保引用 memory-mapped 文件。

为什么它仍然只使用 1 个声明并且没有引用 memory-mapped 文件对我来说是个谜。