c# 中操作共享内存,用到的命名空间是:System.IO.MemoryMappedFiles;
封装了一个Helper,以防以后用的上:
public class MappingHelper
{
long capacity = 1024 * 1024 * 10;
MemoryMappedFile file;
public MappingHelper(string fileName)
{
file = MemoryMappedFile.CreateOrOpen(fileName, capacity);
}
public void WriteString(string msg)
{
using (var stream = file.CreateViewStream())
{
using (var writer = new BinaryWriter(stream))
{
writer.Write(msg);
}
}
}
public string ReadString()
{
using (var stream = file.CreateViewStream())
{
using (var reader = new BinaryReader(stream))
{
List<byte> bytes = new List<byte>();
byte[] temp = new byte[1024];
while (true)
{
int readCount = reader.Read(temp,0,temp.Length);
if (readCount == 0)
{
break;
}
for (int i = 0; i < readCount; i++)
{
bytes.Add(temp[i]);
}
}
if (bytes.Count > 0)
{
//将“\0”去掉
return Encoding.Default.GetString(bytes.ToArray()).Replace("\0","");
}
else
{
return null;
}
}
}
}
}
用法:
写入字符串到名称为test1的共享内存:
MappingHelper mappingHelper=new MappingHelper("test1");
mappingHelper.WriteString("Hello World");
读取名称为test1的共享内存的内容:
var result = mappingHelper.ReadString()