共有メモリ マップ ファイル (別のプログラムによって作成および所有されている) にアクセスする必要があります。そうするために私は使用しています
_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.OpenExisting」を「HandleInheritability.None」とともに使用すると、メモリ マップ ファイルは破棄後に破棄されません。