C#多进程通信之共享内存方式

共享内存方式应该最简单易用的

直接上代码,下面列出了2种,一种是映射视图,一种是映射流,任选一种即可

服务端:

MemoryMappedFile memoryAccessor = MemoryMappedFile.CreateNew("ProcessCommunicationAccessor", 500, MemoryMappedFileAccess.ReadWrite);//创建共享内存映射文件对象,第一个参数为映射的名称,与客户端需要对应,500为大小,单位为字节,MemoryMappedFileAccess为访问权限,是读写还是只读 只写,此处不能使用Using 否则脱离Using 就会释放,客户端无法获取到此名称的内存映射对象

using (var accessor = memoryAccessor.CreateViewAccessor())//获取映射文件对象的视图

{

var helo = Encoding.UTF8.GetBytes("Accessor");

accessor.WriteArray(0, helo, 0, helo.Length);//将给定的值写入此视图中

richTextBox1.Text += Environment.NewLine + "Accessor Send Val:Accessor";

}

MemoryMappedFile memoryStream = MemoryMappedFile.CreateNew("ProcessCommunicationStream", 500, MemoryMappedFileAccess.ReadWrite);//创建流的映射文件对象

using (var stream = memoryStream.CreateViewStream())//获取映射文件的流

{

var helo = Encoding.UTF8.GetBytes("Stream");

stream.Write(helo, 0, helo.Length);//将给定的值写入此内存流中

richTextBox1.Text += Environment.NewLine + "Accessor Send Val:Stream";

}

客户端:

对应上面也是有2种接收方式

MemoryMappedFile memoryAccessor = MemoryMappedFile.OpenExisting("ProcessCommunicationAccessor");//获取服务端定义的ProcessCommunicationAccessor名称的内存映射文件然后调用ReadArray方法读取到服务端写入的数据

using (var accessor = memoryAccessor.CreateViewAccessor())

{

var s = new byte[999];

var read = accessor.ReadArray(0, s, 0, s.Length);

var str = Encoding.UTF8.GetString(s);

richTextBox1.Text += Environment.NewLine + "Accessor Read Val:" + str.ToString();

}

MemoryMappedFile memoryStream = MemoryMappedFile.OpenExisting("ProcessCommunicationStream");//获取服务端定义的ProcessCommunicationStream名称的内存映射文件然后调用ReadToEnd方法读取到服务端写入的数据

using (var stream = memoryStream.CreateViewStream())

{

using (var reader = new StreamReader(stream))

{

var str = reader.ReadToEnd();

richTextBox1.Text += Environment.NewLine + "Stream Read Val:" + str + "\r\n";

}

}

相关推荐
趙卋傑2 分钟前
测试开发场景下常见的 MCP 服务
开发语言·python·测试工具·ai编程
@atweiwei3 分钟前
langchainrust:Rust 版 LangChain 框架(LLM+Agent+RAG)
开发语言·rust·langchain·agent·向量数据库·rag
阿里嘎多学长5 分钟前
2026-04-11 GitHub 热点项目精选
开发语言·程序员·github·代码托管
yugi9878385 分钟前
基于最大信息熵的粒子群优化算法图像分割(MATLAB实现)
开发语言·算法·matlab
yaoxin5211235 分钟前
376. Java IO API - 使用 Globbing 和自定义 Filter 过滤目录内容
java·开发语言·python
飞翔的SA14 分钟前
全程 Python:无需离开 Python 即可实现光速级 CUDA 加速,无需c++支持
开发语言·c++·python·nvidia·cuda
冰暮流星21 分钟前
javascript之dom访问css
开发语言·javascript·css
北风toto21 分钟前
java进制转换方法
java·开发语言·python
楼田莉子28 分钟前
设计模式:创建型设计模式简介
服务器·开发语言·c++·设计模式
好家伙VCC31 分钟前
**基于Colab的高效Python深度学习开发流程:从环境配置到模型部署全流程实战**在当前人工智
java·开发语言·python·深度学习