C# 进程间共享内存通信方式
2017-07-22 18:18
369 查看
1 理论
多进程同步通信有两种方式:共享内存(Shared memory),消息传送(Messages passing)。内存映射文件对于托管世界的开发人员来说似乎很陌生,但它确实已经是很远古的技术了,而且在操作系统中地位相当。实际上,任何想要共享数据的通信模型都会在幕后使用它。
内存映射文件究竟是个什么?内存映射文件允许你保留一块地址空间,然后将该物理存储映射到这块内存空间中进行操作。物理存储是文件管理,而内存映射文件是操作系统级内存管理。
using System; using System.IO; using System.IO.MemoryMappedFiles; using System.Runtime.InteropServices; using System.Threading; namespace IMServer_State { /// <summary> /// 用于共享内存方式通信的 值类型 结构体 /// </summary> public struct ServiceMsg { public int Id; public long NowTime; } internal class Program { private static void Main(string[] args) { Console.Write("请输入共享内存公用名(默认:testmap):"); string shareName = Console.ReadLine(); if (string.IsNullOrEmpty(shareName)) shareName = "testmap"; using (MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen(shareName, 1024000,MemoryMappedFileAccess.ReadWrite)) { Mutex mutex = Mutex.OpenExisting("testmapmutex"); mutex.WaitOne(); using (MemoryMappedViewStream stream = mmf.CreateViewStream(20, 0)) //注意这里的偏移量 { var writer = new BinaryWriter(stream); for (int i = 5; i < 10; i++) { writer.Write(i); Console.WriteLine("{0}位置写入流:{0}", i); } } using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor(1024, 10240)) { int colorSize = Marshal.SizeOf(typeof (ServiceMsg)); var color = new ServiceMsg(); for (int i = 0; i < colorSize*5; i += colorSize) { color.Id = i; color.NowTime = DateTime.Now.Ticks; //accessor.Read(i, out color); accessor.Write(i, ref color); Console.WriteLine("{1}tNowTime:{0}", new DateTime(color.NowTime), color.Id); Thread.Sleep(1000); } } Thread.Sleep(5000); mutex.ReleaseMutex(); } Console.WriteLine("测试: 我是 即时通讯 - 状态服务 我启动啦!!!"); Console.ReadKey(); } } }
View Code
2.4 多线程同步与数据共享案例
此工程下有两个例子,第一个例子在DEMO文件夹中,为多进程同步技术,稍微该为main函数就可运行;第二个例子可以直接打开工程运行,为多进程共享内存方式数据共享,同步技术使用的是信号量。下载地址: MultiProcess.rar
欢迎评论和完善该程序,如果对你有所帮助,请点一个赞吧 : ) 。
参考文章
C# 进程间共享内存通信方式
相关文章推荐
- C# 进程间共享内存通信方式
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
- 进程通信方式--共享内存(shm)--实现自由通信
- 进程间的八种通信方式----共享内存是最快的 IPC 方式
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- 进程间的八种通信方式----共享内存是最快的 IPC 方式
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
- 进程之间的通信方式-共享内存
- 进程间的八种通信方式----共享内存是最快的 IPC 方式
- C# .Net 多进程同步 通信 共享内存 内存映射文件
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- linux下进程通信方式--共享内存
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped
- Linux进程间的通信方式:共享内存的使用
- 父子进程通信的两种方式--消息队列和共享内存
- 进程通信:共享内存通信方式