【c#】内存共享

类:MemoryMappedFile

OpenExisting

打开指定名称的内存映射文件,不存在的化报异常FileNotFoundException

private bool IsMMFExisting(string mmfName)
{
    try
    {
        var mmf = MemoryMappedFile.OpenExisting(mmfName);
        if (mmf == null) return false;
        return true; 
    }
    catch (Exception ex)
    {
        if (ex.ToString().Split(':')[0].Split('.')[2] == "FileNotFoundException")
            return false;
    }
    return false;
}

CreateOrOpen

创建或者打开一个内存映射文件,如果是打开,会忽略容量

参数:

1、mapName内存映射文件名称

2、capacity容量,分配给文件的最大字节

3、access允许的访问类型(枚举,ReadWrite)

返回值:

MemoryMappedFile(类型) :具有特征值的内存映射文件

//打开名为“mm”的内存映射文件
MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("mm",1024,MemoryMappedFileAccess.ReadWrite);

CreateViewAccessor

创建映射到内存映射文件的视图

参数:

1、offset启动此视图的字节位置

2、size视图的大小

3、access允许的访问类型(枚举,默认ReadWrite)

返回:

MemoryMappedViewAccessor(类型):可以随机访问的内存块

//创建一个视图,映射内存映射文件mmf,这个视图可以编辑(且会同步到内存映射文件)
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor(0, 1024);
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor(0, 1024,MemoryMappedFileAccess.ReadWrite);

属性和方法

//1、CanRead属性
accessor.CanRead == true;//视图可读
//2、Read、Write方法
int colorSize = Marshal.SizeOf(typeof(MyColor));
MyColor color;
for (long i = 0; i < 1024; i += colorSize)//按MyColor大小读写视图1024容量的所有内容
{
    accessor.Read(i, out color);//读内存,读出的结果color
    color.Brighten(10);//修改
    accessor.Write(i, ref color);//再写入
}
posted @ 2024-10-17 09:05  Sitar  阅读(8)  评论(0编辑  收藏  举报