본문 바로가기
카테고리 없음

[C#] SharedMemory 사용법

by YJHTPII 2023. 6. 2.
반응형

https://cypsw.tistory.com/entry/C-SharedMemory-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[C#] SharedMemory 사용법

실제 업무에서는 Struct 내부에 데이터를 넣어 SharedMemory 를 통해 프로세스간 데이터를 공유한다. Install class SharedMemory { public void installSharedMemory(string name) { A a; MemoryMappedFile mmf = MemoryMappedFile.CreateNe

cypsw.tistory.com

 

 

 

 

실제 업무에서는 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 에 상세히 설명되어 있다.

반응형

댓글