我需要访问共享内存映射文件(由单独的程序创建和拥有);为此,我正在使用
_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();
}
但是似乎我在这里正在执行的操作是终止内存映射文件,因为使用该内存映射文件的另一个程序开始获取 protected 内存错误。
如果我处置
_map
,即使它不是继承的所有权,它是否也会实际上破坏了内存映射文件?更新
原来,另一个程序在我发出进入空闲模式的信号后立即进行了调皮的事情,该程序不受我的控制(在处置内存映射之前)。
当将“MemoryMappedFile.OpenExisting”与“HandleInheritability.None”一起使用时,处置后内存映射文件将不会被销毁。
最佳答案
不,处置通过调用OpenExisting()打开的MemoryMappedFile不会破坏基础MMF。
调用Windows API CreateFileMapping()的过程控制MMF的生存期,而OpenExisting()则调用OpenFileMapping()。
关于c# - 处置后保持MemoryMappedFile处于事件状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17002528/