c# 共享内存读写
时间: 2024-08-15 17:03:24 浏览: 53
在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); // 释放内存
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)