c# 共享内存读写
时间: 2024-08-15 15:03:24 浏览: 109
SharedMemory:C#共享内存类,用于在进程之间共享数据(数组,缓冲区和循环缓冲区)
5星 · 资源好评率100%
在C#中,共享内存是一种进程间通信(IPC,Inter-Process Communication)的技术,它允许不同线程甚至不同进程之间直接访问同一块内存区域,从而实现数据的高效交换。这种机制通常通过`MemoryMappedFiles` API 或 `System.Runtime.InteropServices`命名空间下的`UnmanagedMemoryStream`来操作。
1. **MemoryMappedFiles**:
C#提供了一个`MemoryMappedFile`类,你可以创建一个新的映射文件,将其视为现有文件或内存的一部分。多个线程可以同时读写这个内存映射区,这对于需要大量数据交换并且性能敏感的应用非常有用。
```csharp
MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile("sharedfile.txt");
byte[] data = new byte[mmf.Length];
mmf.ReadArray(0, data);
// 然后在其他线程中更新数据
data = (byte)5;
mmf.WriteArray(0, data);
```
2. **UnmanagedMemoryStream**:
如果需要更底层的控制,可以使用`UnmanagedMemoryStream`结合`IntPtr`来直接操作未经管理的内存地址。这适合于处理性能关键场景或者是跨平台应用,因为它们不受.NET垃圾回收限制。
```csharp
IntPtr ptr = Marshal.AllocHGlobal(size); // 分配内存
UnmanagedMemoryStream ums = new UnmanagedMemoryStream(ptr, size, true);
// ...然后进行读写...
Marshal.FreeHGlobal(ptr); // 释放内存
```
阅读全文