在我的專案中添加第二個記憶體映射檔案時,第一個不再跨行程作業。
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 時做錯了什么,它在沒有第二個 mmf 的情況下作業。
我正在使用 Microsoft Visual Studio Community 2019 版本 16.11.11 .NET Framework 4.7.2
uj5u.com熱心網友回復:
原來垃圾收集是這里的罪魁禍首。要解決此問題,請確保在需要其他行程讀取該值時參考記憶體映射檔案。
為什么它仍然只使用 1 個宣告并且沒有參考記憶體映射檔案對我來說是個謎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455660.html
