Итак, у меня есть сегмент памяти в файле общей памяти, который в C структурирован с массивом фиксированного размера элементов буфера в конце. Размер. Я не могу иметь фиксированные массивы в 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#? Как-то установить связь между структурой и памятью в общей памяти?