C#写些应用程序,有时会用到与底层语言C++间的交互。有时候为了提升程序部分性能可以选择共享内存的方式来处理。
1.C#处理相关的代码
static void Main(string[] args)
{
//定义内存大小
int size = 1024;
//创建共享内存
MemoryMappedFile shareMemory = MemoryMappedFile.CreateOrOpen("global_share_memory", size);
Console.WriteLine("创建共享内存完成...");
//线程等待10秒
System.Threading.Thread.Sleep(10000);
var stream = shareMemory.CreateViewStream(0, size);
string value = "Hello World";
byte[] data = System.Text.Encoding.UTF8.GetBytes(value);
stream.Write(data);
stream.Dispose();
Console.ReadKey();
}
2.C++处理相关的代码
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
LPVOID pBuffer;
string strMapName("global_share_memory");
HANDLE hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, strMapName.c_str());
if (NULL == hMap)
{
cout << "无共享内存..." << endl;
}
else
{
while (true)
{
Sleep(1000);
pBuffer = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
cout << "读取共享内存数据:" << (char*)pBuffer << endl;
}
}
}
3.运行C#程序,然后运行C++程序就可以实现数据交互。效果如下