c\#메모리 맵 을 통 해 파일 공유 메모리 의 예제 코드
공유 메모 리 는 메모리 맵 파일 의 특수 한 상황 입 니 다.메모리 맵 은 디스크 의 파일 이 아 닌 메모리 입 니 다.공유 메모리 의 주 어 는 프로 세 스(Process)입 니 다.운영 체 제 는 기본적으로 모든 프로 세 스에 메모리 공간 을 할당 합 니 다.모든 프로 세 스 는 운영 체제 가 할당 한 메모리 에 만 접근 할 수 있 고 다른 프로 세 스에 접근 할 수 없습니다.때로는 서로 다른 프로 세 스 사이 에서 같은 메모리 에 접근해 야 하 는데,어떻게 해 야 합 니까?운영 체 제 는 공유 메모리 에 접근 하 는 API 를 만 들 었 습 니 다.공유 메모리 가 필요 한 프로 세 스 는 이 정 의 된 API 를 통 해 여러 프로 세 스 간 에 공 유 된 메모리 에 접근 할 수 있 습 니 다.각 프로 세 스 는 하 드 디스크 에 있 는 파일 에 접근 하 는 것 과 같 습 니 다.한편,.Net 4.0 에는 System.IO.Memory MappedFiles 네 임 스페이스 가 도입 되 었 습 니 다.이 네 임 스페이스 의 클래스 는 windows 공유 메모리 관련 API 를 패키지 하여.Net 프로그래머 가 메모리 맵 파일 을 더욱 편리 하 게 사용 할 수 있 도록 합 니 다.
C\#에서 공유 메모 리 를 사용 합 니 다.다음 App1 코드 는 사용자 가 공유 메모리 에 텍스트 한 줄 을 입력 하도록 합 니 다.App 2 콘 솔 을 계속 새로 고치 고 최신 공유 메모리 내용 을 출력 합 니 다.App3 가 구현 하 는 기능 은 App2 와 같 지만 읽 기 방법 은 다르다.
App1 코드:
using System;
using System.Collections.Generic;android
using System.Linq;
using System.Text;
using System.IO;
//
using System.IO.MemoryMappedFiles;
namespace App1
{
class Program
{
static void Main(string[] args)
{
long capacity = 1<<10<<10;
//
using (var mmf = MemoryMappedFile.CreateOrOpen("testMmf", capacity, MemoryMappedFileAccess.ReadWrite))
{
// MemoryMappedFile CreateViewAccssor
var viewAccessor = mmf.CreateViewAccessor(0, capacity);
// ,
while (true)
{
Console.WriteLine(" :");
string input = Console.ReadLine();
//
viewAccessor.Write(0, input.Length);
// 4
viewAccessor.WriteArray<char>(4, input.ToArray(), 0, input.Length);
}
}
}
}
}
App2 코드:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
//
using System.IO.MemoryMappedFiles;
namespace App2
{
class Program
{
static void Main(string[] args)
{
long capacity = 1<<10<<10;
using (var mmf = MemoryMappedFile.OpenExisting("testMmf"))
{
MemoryMappedViewAccessor viewAccessor = mmf.CreateViewAccessor(0, capacity);
//
while (true)
{
//
int strLength = viewAccessor.ReadInt32(0);
char[] charsInMMf = new char[strLength];
//
viewAccessor.ReadArray<char>(4, charsInMMf, 0, strLength);
Console.Clear();
Console.Write(charsInMMf);
Console.Write("\r");
Thread.Sleep(200);
}
}
}
}
}
App3 코드:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.MemoryMappedFiles;
using System.IO;
namespace App3
{
class Program
{
static void Main(string[] args)
{
long capacity = 1 << 10 << 10;
//
using (var mmf = MemoryMappedFile.OpenExisting("testMmf"))
{
// CreateViewStream stream
using (var mmViewStream = mmf.CreateViewStream(0, capacity))
{
// Unicode
using (BinaryReader rdr = new BinaryReader(mmViewStream,Encoding.Unicode))
{
while (true)
{
mmViewStream.Seek(0, SeekOrigin.Begin);
int length = rdr.ReadInt32();
char[] chars = rdr.ReadChars(length);
Console.Write(chars);
Console.Write("\r");
System.Threading.Thread.Sleep(200);
Console.Clear();
}
}
}
}
}
}
}
데 이 터 를 읽 을 때 두 가지 방법 을 썼 다.이전 에는 프로 세 스 간 의 통신 을 거의 사용 하지 않 았 기 때문에 이 방법 은 단지 초보적인 인식 을 하고 싶 을 뿐이다.이 프로그램 은 너무 초라 하 게 써 서 판단 하지 못 한 것 이 많다.예 를 들 어 공유 메모 리 를 어떻게 만 들 었 는 지 삭제 하 는 지 등등...
이상 은 c\#메모리 맵 을 통 해 파일 공유 메모리 의 예제 코드 에 대한 상세 한 내용 입 니 다.c\#파일 공유 메모리 에 관 한 자 료 는 다른 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.