gpt4 book ai didi

c# - Dispose 后保持 MemoryMappedFile 事件

转载 作者:太空狗 更新时间:2023-10-29 17:58:20 27 4
gpt4 key购买 nike

我需要访问共享内存映射文件(由单独的程序创建和拥有);为此,我正在使用

_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,它是否真的会破坏内存映射文件,即使它不是继承的所有权?

更新

事实证明,另一个不受我控制的程序在我发出进入空闲模式的信号后(紧接在处理内存映射之前)正在做一些顽皮的事情。

当使用带有“HandleInheritability.None”的“MemoryMappedFile.OpenExisting”时,内存映射文件不会在处理后被销毁。

最佳答案

不,处理通过调用 OpenExisting() 打开的 MemoryMappedFile 不会破坏底层 MMF。

调用 Windows API CreateFileMapping() 的进程控制 MMF 的生命周期,OpenExisting() 改为调用 OpenFileMapping()。

关于c# - Dispose 后保持 MemoryMappedFile 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com