当前位置: 首页 > news >正文

C# 共享内存

共享内存定义

共享内存(Shared Memory)是一种进程间通信(IPC)机制,通过它,多个进程可以访问同一块内存,从而实现高效的数据共享和通信。这种方式比其他IPC机制(如管道、消息队列)更高效,因为它避免了数据在进程间的复制。

帮助类编写

public class SharedMemoryHelper
{private string memoryName;private string mutexName;private Mutex mutex;public SharedMemoryHelper(string memoryName, string mutexName){this.memoryName = memoryName;this.mutexName = mutexName;this.mutex = new Mutex(false, mutexName);}public bool IsSharedMemoryCreated(){try{MemoryMappedFile.OpenExisting(memoryName);return true;}catch (FileNotFoundException){return false;}}public void WriteToSharedMemory(string message){mutex.WaitOne();try{MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen(memoryName, 1024);MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();byte[] clearBuffer = new byte[1024];accessor.WriteArray(0, clearBuffer, 0, clearBuffer.Length);byte[] buffer = Encoding.UTF8.GetBytes(message);accessor.WriteArray(0, buffer, 0, buffer.Length);}finally{mutex.ReleaseMutex();}}public string ReadFromSharedMemory(){mutex.WaitOne();try{MemoryMappedFile mmf = MemoryMappedFile.OpenExisting(memoryName);MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();byte[] buffer = new byte[1024];accessor.ReadArray(0, buffer, 0, buffer.Length);return Encoding.UTF8.GetString(buffer).TrimEnd('\0');}catch (FileNotFoundException){throw new InvalidOperationException("找不到共享内存文件.");}finally{mutex.ReleaseMutex();}}
}

使用方法

private readonly SharedMemoryHelper _SharedMemory;
public MainWindowViewModel()
{_SharedMemory = new SharedMemoryHelper(MemoryName, MutexName);_SharedMemory.WriteToSharedMemory(WriteMessage);if (_SharedMemory.IsSharedMemoryCreated()){Test = JsonConvert.DeserializeObject<Test>(ReadMessage);}else{MessageBox.Show("读取不到内存文件!");}
}

2024/6/6

相关文章:

  • Linux操作系统:Zookeeper在虚拟环境下的安装与部署
  • 手撸一个java简易聊天室
  • 【UML用户指南】-13-对高级结构建模-包
  • Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境
  • 快速开始一个go程序(极简-快速入门)
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
  • Java24:会话管理 过滤器 监听器
  • 深度解析地铁票务系统的技术架构与创新应用
  • 技术人如何打造研发团队
  • 安利一款非常不错浏览器文本翻译插件(效果很不错,值得一试)
  • 【数据结构】图之邻接矩阵代码实现与dfs、bfs
  • c语言:自定义类型(枚举、联合体)
  • 网络流媒体协议——HLS协议
  • MySQL实体类框架
  • OpenGauss数据库-7.用户及角色
  • 2019年如何成为全栈工程师?
  • Intervention/image 图片处理扩展包的安装和使用
  • MySQL数据库运维之数据恢复
  • Octave 入门
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • TCP拥塞控制
  • vue总结
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 半理解系列--Promise的进化史
  • 不上全站https的网站你们就等着被恶心死吧
  • 官方解决所有 npm 全局安装权限问题
  • 爬虫模拟登陆 SegmentFault
  • 前端学习笔记之观察者模式
  • 前端之React实战:创建跨平台的项目架构
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 异步
  • 用 Swift 编写面向协议的视图
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)常见O(n^2)排序算法解析
  • (2.2w字)前端单元测试之Jest详解篇
  • (2022 CVPR) Unbiased Teacher v2
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (solr系列:一)使用tomcat部署solr服务
  • (办公)springboot配置aop处理请求.
  • (备忘)Java Map 遍历
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (南京观海微电子)——I3C协议介绍
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)shell调试方法
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET正则基础之——正则委托