C# 使用内存映射文件实现进程间通信

新建两个进程程序:

A:

cs 复制代码
 static void Main(string[] args)
 {
     // 此处的 MemoryMappedFile 实例不能使用 using 语法
     // 因为它会自动释放我们的内存映射文件,会导致进程B找不到这个映射文件而抛出异常
     MemoryMappedFile mmf = MemoryMappedFile.CreateNew("IPC_MAP", 10000);
     // 创建互斥量以协调数据的读写
     Mutex mutex = new Mutex(true, "IPC_MAP_MUTEX", out bool mutexCreated);
     using (MemoryMappedViewStream stream = mmf.CreateViewStream())
     {
         StreamWriter sw = new StreamWriter(stream);
         // 向内存映射文件种写入数据
         sw.WriteLine("This is IPC MAP TEXT");
         // 这一句是必须的,在某些情况下,如果不调用Flush 方法会造成进程B读取不到数据
         // 它的作用是立即写入数据
         // 这样在此进程释放 Mutex 的时候,进程B就能正确读取数据了
         sw.Flush();
     }
     mutex.ReleaseMutex();

     Console.ReadLine();

     mmf.Dispose();
 }

B:

cs 复制代码
 static void Main(string[] args)
 {
     using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("IPC_MAP"))
     {
         Mutex mutex = Mutex.OpenExisting("IPC_MAP_MUTEX");
         // 等待写入完成
         mutex.WaitOne();
         using (MemoryMappedViewStream stream = mmf.CreateViewStream())
         {
             StreamReader sr = new StreamReader(stream);
             // 读取进程 A 写入的内容
             Console.WriteLine(sr.ReadLine());
         }
         mutex.ReleaseMutex();
     }

     Console.ReadLine();
 }

依次启动A、B,在B的窗口中:

代码引用自:

温故之.NET进程间通信------内存映射文件 - 知乎

那MemoryMappedFile.CreateNew是什么回事呢?

一直F12深入下去看看:

还是调用的win32的CreateFileMapping,但是多了很多封装,使用起来很方便。

关于CreateFileMapping,资源就很多了,这里不赘述。

另外,C#中很多对象是可以在进程间共享的,可以自行学习。

相关推荐
我是唐青枫27 分钟前
深入理解 C#.NET TaskScheduler:为什么大量使用 Work-Stealing
c#·.net
唯情于酒2 小时前
net core web api 使用log4net
c#·.net core
SunnyDays10113 小时前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
人工智能AI技术3 小时前
Qwen3.5-Plus登顶|C#集成通义千问,高并发服务实战优化
人工智能·c#
SunnyDays10114 小时前
如何使用 C# 在 Word 文档中插入超链接 (含文本与图片链接)
开发语言·c#
一念春风4 小时前
证件照制作工具(WPF C#)
c#·wpf
似水明俊德12 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
阿蒙Amon14 小时前
C#常用类库-详解SerialPort
开发语言·c#
似水明俊德15 小时前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
.NET修仙日记21 小时前
Acme.ReturnOh:让.NET API返回值处理更优雅,统一响应格式一步到位
c#·.net·webapi