温馨提示×

c# memorymappedfile如何共享内存

c#
小樊
81
2024-11-30 03:12:17
栏目: 编程语言

在C#中,使用MemoryMappedFile类可以创建和访问共享内存。以下是一个简单的示例,展示了如何使用MemoryMappedFile来共享内存:

  1. 首先,创建一个名为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();
    }
}
  1. 然后,在主程序中使用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的共享内存文件,并向其中写入了一些数据。然后,我们从共享内存中读取数据并将其输出到控制台。

请注意,这个示例仅适用于同一台计算机上的多个进程。如果你需要在不同的计算机之间共享内存,你需要使用网络共享或命名管道等其他技术。

0