C# 在处理后使内存文件保持活动状态
我需要访问共享内存映射文件(由单独的程序创建和拥有);为了做到这一点,我正在使用C# 在处理后使内存文件保持活动状态,c#,winapi,shared-memory,C#,Winapi,Shared Memory,我需要访问共享内存映射文件(由单独的程序创建和拥有);为了做到这一点,我正在使用 _map = MemoryMappedFile.OpenExisting( "buffer", MemoryMappedFileRights.ReadWrite, HandleInheritability.None); _mapAccessor = _map.CreateViewAccessor(0, 0, MemoryMappedFile
_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();
}
但我在这里做的似乎是删除内存映射文件,因为使用该文件的其他程序开始出现受保护的内存错误
如果我处置\u映射
,它是否确实会销毁内存映射文件,即使它不是继承的所有权
更新
原来另一个程序,不在我的控制之下,在我发出信号让它进入空闲模式(在处理内存映射之前)后,正在做一些不正常的事情
当将“MemoryMappedFile.OpenExisting”与“HandleInheritability.None”一起使用时,内存映射文件在dispose后不会被销毁 否,处理通过调用OpenExisting()打开的MemoryMappedFile不会破坏底层MMF
调用Windows API CreateFileMapping()的进程控制MMF的生存期,而OpenExisting()则调用OpenFileMapping()。否,处理通过调用
OpenExisting()打开的MemoryMappedFile将不会破坏基础MMF。调用Windows API的进程CreateFileMapping()
控制MMF的生存期,而OpenExisting()
则调用OpenFileMapping()
。您最好关注MMF的内容和使访问MMF安全的所需同步对象。你似乎没有任何这样的同步是一个相当大的危险信号。顺便说一句,你是对的,汉斯,问题不在于内存映射,而在于另一个程序(不是我的)对一个驱动程序做了一些调皮的事情,在我发出进入空闲模式的信号后。@MatthewWatson你能粘贴你的评论作为回答吗?我会接受。@MeirionHughes好的,完成。:)