메모리 매핑 파일을 통해 인스턴스 "포인터"를 다른 프로세스로 전달할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2422262

문제

기본적으로 프로그램/프로세스에서 인스턴스를 전달하는 방법을 찾고 있습니다. 없이 .NET 4.0에서 인스턴스 직렬화.

예, 나는 내 좋은 ol '100% 안전하지 않은 포인터를 놓치고 있습니다.)

메모리 매핑 된 파일을 .NET 4.0에 새로운 통합하면 도움이 될 것이라고 생각했습니다.

그러나 내가 같은 것을 시도 할 때

var mmf = MemoryMappedFile.CreateFromFile(@"C:\temp\test.mp", FileMode.Create, "mmf",
                                          1024*1024*300, 
                                          MemoryMappedFileAccess.ReadWrite);
var ss = new SimpleStruct();
ss.items = _items; //Collection of Items objects
var FileMapView = mmf.CreateViewAccessor();
FileMapView.Write<SimpleStruct>(0, ref ss); //Exception

다음과 같은 인수를 얻습니다.

The specified Type must be a struct containing no references.

MMF 사용에 대한 참조를 통과 할 수 있습니까? 그렇지 않다면 어떤 방법이 있습니까? 조금도 프로그램/프로세스 주변의 인스턴스를 전달하려면?

도움이 되었습니까?

해결책

관리되지 않는 코드에서는 불가능합니다. 포인터 값은 다른 프로세스에서 의미가 없습니다. 관리되는 물체는 쓰레기 수집 된 힙에 살고 있으며, 이는 MMF 뷰의 주소와 결코 일치하지 않습니다. 어떻게 든 그랬더라도 쓰레기 수집가는 혼란을 야기 할 것입니다. MMFS가 지원되는 데 4 버전의 .NET이 필요한 주요 이유.

관리 대상을 뷰로 직렬화하는 것은 불가피합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top