c# 공유 메모리 예제

그게 전부에요… 코드의 주석은 설명해야 할 거의 모든 것을 설명해야 합니다. msdn에 일명 예 – 나는 인터넷에서이 주제와 관련된 많은 튜토리얼이 있다는 것을 알고 있지만, 그들 대부분은 ints를 포함하는 구조와 간단한 예제를 처리합니다. .NET Framework 4까지는 메모리 공유가 어려웠습니다. 그러나 몇 가지 새로운 기능 덕분에 정말 쉽고 새로운 함수가 메모리를 처리하므로 응용 프로그램이 스레드 또는 메모리에 대해 아무것도 알 필요가 없습니다. ReadAll 및 디serialize의 두 도우미는 .NET BinaryReader를 사용하여 memoryMappedViewStream 개체에서 읽은 바이트 배열을 변환합니다. 지속파일은 디스크의 소스 파일과 연결된 메모리 매핑 파일입니다. 마지막 프로세스가 파일 작업을 완료하면 데이터가 디스크의 원본 파일에 저장됩니다. 이러한 메모리 매핑 된 파일은 매우 큰 소스 파일작업에 적합합니다. 마지막으로 텍스트 상자에 문자열로 변환 된 바이트를 표시합니다. 코드는 추가 작업 또는 이벤트에 대한 명령 또는 데이터에 대한 바이트를 구문 분석할 수 있습니다.

파일과 마찬가지로 메모리를 닫아야 합니다. 이 예제에서는 데모를 위해 재귀적으로 호출 할 수 있도록 열어 두십시오. MemoryMap은 인스턴스화되는 memoryMapName 매개 변수에 크게 기대어 있습니다. 예를 들어 MemoryMappedFile 개체는 실제 파일을 요구하며 경로에 포함됩니다. 따라서 유효성 검사 메서드는 해당 memoryMapName Windows의 파일 이름 지정 기대를 충족 하는 보호 하려고 합니다. 이 방법의 주요 장점은 데이터를 복제하여 다른 프로세스로 보낼 필요가 없다는 것입니다 . IPC 메모리 매핑 된 파일 공유 데이터 순환 링 버퍼 여기 시도 하 고 캐치 우리를 돕기 위해 중요 하다, 공유 메모리 파일이 존재 하지 않을 수 있습니다., 그래서 난 단순히 예외를 잡으려고 하 고 단순히 존재 하지 않는 메시지 상자를 표시. 여기에 사용자 고유의 처리기를 추가할 수 있습니다. 참고: 표준 파일 처리와 달리 이 클래스는 “If.exist”를 지원하지 않습니다. memoryMapName의 중요성은 파일 이름 지정을 넘어섭니다. 곧 볼 수 있듯이 MemoryMap은 잠금을 관리하고 MemoryMappedFile 인스턴스에 액세스하는 데 사용합니다.

로컬 캐싱 메커니즘의 성능 요구 사항과 메모리 매핑된 파일의 기능을 결합하면 상서로운 결혼이 약속됩니다. 다음 설명은 이러한 해결 을 살펴봅시다. 로컬 사용자 지정 메모리 매핑 파일 기반 캐싱 솔루션을 만들면 경계가 요구됩니다. 기존, 완전한 기능을 갖춘 솔루션이 개발자 시간의 더 나은 투자를 구성하는지 여부를 각 기능을 끊임없이 자문하는 것은 시간이 잘 소요됩니다. 이 경고를 염두에 두고 여러 메모리맵 향상 기능이 프로덕션 사용 사례에 대해 발생할 수 있습니다. 파일이 메모리 매핑에 사용할 수 있는 응용 프로그램의 논리 메모리 공간 크기보다 큰 경우(32비트 컴퓨터에서 2GB) 여러 뷰가 필요할 수도 있습니다. 메모리 매핑된 파일은 실제 파일에 매핑되었을 수 있으며 동일한 시스템의 여러 프로세스에서 읽고 쓸 수 있는 가상 메모리 영역입니다. 파일 또는 그 일부가 뷰를 통해 하나 이상의 프로세스에 연속적인 메모리 블록으로 액세스됩니다. 그런 다음 각 보기를 메모리 위치를 사용하여 읽도록/쓸 수 있습니다.