【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);//再写入
}