실제 업무에서는 Struct 내부에 데이터를 넣어 SharedMemory 를 통해 프로세스간 데이터를 공유한다.
Install
class SharedMemory
{
public void installSharedMemory(string name)
{
A a;
MemoryMappedFile mmf = MemoryMappedFile.CreateNew(name, 10000);
var accessor = mmf.CreateViewAccessor();
a.a = 244;
a.b = 255;
a.c = 266;
accessor.Write<A>(0, ref a);
}
}
struct A
{
public int a;
public int b;
public int c;
}
Read
class SharedMemory
{
public void Read()
{
try
{
using (var mmf = MemoryMappedFile.OpenExisting("oug"))
{
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, 12))
{
using (var accessor = mmf.CreateViewAccessor())
{
accessor.Read(0, out Test a);
Console.WriteLine(a.a);
Console.WriteLine(a.b);
Console.WriteLine(a.c);
Console.WriteLine("");
}
}
}
}
catch
{
Console.WriteLine("SharedMemory is unInstall");
}
}
struct Test
{
public int a;
public int b;
public int c;
}
}
만약 공유메모리를 동시에 접근하여 읽고 쓸 수 있게 하여야 한다면
Mutex, Lock 을 활용해서 구현하면 가능하다.
Dynamic 한 형태의 자료형을 넣어야 할 경우는 지양하는것이 좋으며,
부득이하게 삽입해야 한다면 직렬화, 데이터 Size 지정 등이 필요하다.
관련 예제는 MSDN 에 상세히 설명되어 있다.
'Programming > C#' 카테고리의 다른 글
MAUI의 미래에 대해 (0) | 2023.06.05 |
---|---|
[C#] Forms.Timer vs Threading.Timer (0) | 2022.07.25 |
[C#] UDP Multicast 수신 (0) | 2022.04.08 |
[C#]System.Timers.Timer 사용시 Race Condition (0) | 2021.12.22 |
[C#] 반복문 캐싱 최적화 (0) | 2021.07.14 |