J'ai donc un segment de mémoire dans un fichier de mémoire partagée qui en C est structuré avec un tableau de taille fixe d'éléments de tampon à la fin. Taille Je ne peux pas avoir des tableaux de taille fixe en C# à la fin d'une structure J'ai créé une structure de tampon pour encapsuler ceci et juste les lire après avoir lu l'en-tête, tout cela fonctionne très bien.Mémoire mappée, puis-je synchroniser un objet avec un emplacement de mémoire?
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
}
Ramenée Code voici comment je l'ai lu:
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]);
}
Mon problème est que cette structure est mise à jour tout à fait plusieurs fois par seconde et en C, il est aussi facile que pHeader = (HeaderType *)pSharedMem;
pour permettre l'accès brut aux données sans le lire continuellement dans un autre domaine. Est-ce possible du tout en C#? D'une manière ou d'une autre, établir une connexion entre une structure et un emplacement de mémoire dans la mémoire partagée?