在C#中,使用MemoryMappedFile
类可以创建和访问共享内存。以下是一个简单的示例,展示了如何使用MemoryMappedFile
来共享内存:
- 首先,创建一个名为
SharedMemory.cs
的新类,用于封装与共享内存相关的操作:
using System;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices;
public class SharedMemory
{
private readonly MemoryMappedFile _memoryMappedFile;
private readonly MemoryMappedViewAccessor _accessor;
public SharedMemory(string filePath, long size)
{
_memoryMappedFile = MemoryMappedFile.CreateOrOpen(filePath, size);
_accessor = _memoryMappedFile.CreateViewAccessor();
}
public void Write(long position, byte[] data)
{
_accessor.Write(position, data);
}
public byte[] Read(long position, int length)
{
byte[] buffer = new byte[length];
_accessor.Read(position, buffer, 0, length);
return buffer;
}
public void Dispose()
{
_accessor.Dispose();
_memoryMappedFile.Dispose();
}
}
- 然后,在主程序中使用
SharedMemory
类来创建和访问共享内存:
using System;
class Program
{
static void Main(string[] args)
{
// 创建一个名为"SharedMemoryExample.dat"的共享内存文件,大小为1024字节
string sharedMemoryFilePath = "SharedMemoryExample.dat";
long sharedMemorySize = 1024;
// 创建一个共享内存实例
using (SharedMemory sharedMemory = new SharedMemory(sharedMemoryFilePath, sharedMemorySize))
{
// 向共享内存中写入数据
byte[] dataToWrite = new byte[] { 1, 2, 3, 4, 5 };
sharedMemory.Write(0, dataToWrite);
// 从共享内存中读取数据
byte[] dataRead = sharedMemory.Read(0, dataToWrite.Length);
// 输出读取到的数据
Console.WriteLine("Data read from shared memory: ");
foreach (byte b in dataRead)
{
Console.Write(b + " ");
}
}
}
}
在这个示例中,我们创建了一个名为SharedMemoryExample.dat
的共享内存文件,并向其中写入了一些数据。然后,我们从共享内存中读取数据并将其输出到控制台。
请注意,这个示例仅适用于同一台计算机上的多个进程。如果你需要在不同的计算机之间共享内存,你需要使用网络共享或命名管道等其他技术。