You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用MemoryMappedFile.OpenExisting抛出FileNotFoundException的问题排查

问题原因及解决方案

核心原因

第一个using语句块创建的MemoryMappedFile实例,在代码执行完该块后会被自动销毁:using语法会在代码块结束时调用对象的Dispose()方法,释放内存映射文件的系统资源,对应的命名内存映射对象也就不存在了。此时第二个using块尝试通过OpenExisting打开同名的内存映射文件,自然会因找不到目标而抛出System.IO.FileNotFoundException。

修复方案

如果是单进程内的读写操作,只需将读写逻辑放在同一个MemoryMappedFile的生命周期内即可:

using (MemoryMappedFile mmFile = MemoryMappedFile.CreateNew("Raise", 1000))
{
    // 写入操作
    using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
    {
        accessor.Write(500, 11082003);
        Console.WriteLine("Memory-mapped file created!");
    }

    // 读取操作,此时mmFile尚未被释放
    using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
    {
        int value = accessor.ReadInt32(500);
        Console.WriteLine("The answer is : {0}", value);
    }
}

如果是跨进程读写的场景,需要确保写入进程的MemoryMappedFile实例保持存活(不提前调用Dispose()),直到读取进程完成读取;或者改用基于物理文件的持久化内存映射文件,避免内存中的映射对象被销毁后无法访问。

内容的提问来源于stack exchange,提问作者Asive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:58:08