【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 @   Sitar  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示