私は共有メモリファイル内にメモリセグメントを持っています。メモリセグメントは、最後にバッファ要素の固定サイズの配列で構成されています。サイズ私は構造体の終わりにC#で固定サイズの配列を持つことはできません。これをカプセル化するバッファ構造体を作成し、ヘッダーを読み込んだ後に読み込みます。メモリがマップされていますが、オブジェクトをメモリ位置と同期させることはできますか?
struct SDKHeader {
int a;
int b;
int numBuf; //Number of buffers to read from
long c;
}
struct SDKBuffer
{
int size;
int location; //Position in shared memory
}
煮詰めコードこれは私がそれを読む方法です:
memoryMap = MemoryMappedFile.OpenExisting(MemMapFilename);
memoryAccessor = memoryMap.CreateViewAccessor();
int headerSize = Marshal.SizeOf(typeof(SDKHeader));
memoryAccessor.Read(0, out header);
int bufferSize = Marshal.SizeOf(typeof(SDKBuffer));
buffers = new SDKBuffer[header.numBuf];
for(int i = 0; i < header.numBuf; i++)
{
memoryAccessor.Read(headerSize + i * bufferSize, out buffers[i]);
}
を私の問題は、この構造は、毎秒かなりの数回更新され、Cでそれが生のアクセスを許可するようにpHeader = (HeaderType *)pSharedMem;
と同じくらい簡単だということですデータを別の領域に連続的に読み取らずにこれはC#で可能ですか?何とか構造体と共有メモリ内のmemorylocationとの間の接続を作成しますか?