【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);//再写入
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!