2
두 프로세스간에 통신을 시도하고 있습니다. MSDN 문서에서, 나는 MemoryMappingFile을 보았고 나는 이것을 사용하여 통신했다.MemoryMappingFile 관련 문제
public class SmallCommunicator : ICommunicator
{
int length = 10000;
private MemoryMappedFile GetMemoryMapFile()
{
var security = new MemoryMappedFileSecurity();
security.SetAccessRule(
new System.Security.AccessControl.AccessRule<MemoryMappedFileRights>("EVERYONE",
MemoryMappedFileRights.ReadWriteExecute, System.Security.AccessControl.AccessControlType.Allow));
var mmf = MemoryMappedFile.CreateOrOpen("InterPROC",
this.length,
MemoryMappedFileAccess.ReadWriteExecute,
MemoryMappedFileOptions.DelayAllocatePages,
security,
HandleInheritability.Inheritable);
return mmf;
}
#region ICommunicator Members
public T ReadEntry<T>(int index) where T : struct
{
var mf = this.GetMemoryMapFile();
using (mf)
{
int dsize = Marshal.SizeOf(typeof(T));
T dData;
int offset = dsize * index;
using (var accessor = mf.CreateViewAccessor(0, length))
{
accessor.Read(offset, out dData);
return dData;
}
}
}
public void WriteEntry<T>(T dData, int index) where T : struct
{
var mf = this.GetMemoryMapFile();
using (mf)
{
int dsize = Marshal.SizeOf(typeof(T));
int offset = dsize * index;
using (var accessor = mf.CreateViewAccessor(0, this.length))
{
accessor.Write(offset, ref dData);
}
}
}
#endregion
}
아무도이 코드가 작동하지 않는 이유를 말해 줄 수 있습니까? 디스크 파일과 함께 사용할 때와 동일한 코드가 작동합니다.
연속적인 읽기 및 쓰기에서 데이터가 손실 된 것처럼 보입니다. 내가 놓친 게 있니?
아무도이 질문을 보지 못한 것 같습니다. 그렇지? – abhishek
[DelayAllocatePages 매개 변수가 일부 시스템에서 예외를 발생시킨 것 같습니다.] 경고 (https://stackoverflow.com/questions/46083451/memorymappedviewstream-error-does-not-have-appropriate-access). 소량의 메모리를 다루고 있기 때문에 어쨌든 매개 변수는 필요하지 않습니다. (그냥 앞에 할당하십시오) 또한 T는 항상 같은 크기입니까? 그렇지 않은 경우 각 항목의 오프셋을 추적해야 할 수 있습니다. – millejos