Effiziente Speicherfreigabe zwischen Anwendungen
In diesem Szenario verfügen Sie über in C und C# geschriebene Anwendungen, die einen effizienten Zugriff auf den gemeinsam genutzten Speicher erfordern. Es stehen mehrere Lösungen zur Verfügung, aber für eine optimale Leistung sollten Sie den folgenden Ansatz in Betracht ziehen:
Speicherzugeordnete Dateien
Speicherzugeordnete Dateien bieten einen Mechanismus zum Teilen von Daten zwischen mehreren Prozessen Erstellen einer gemeinsamen Speicherzone im virtuellen Adressraum. Dadurch können Anwendungen auf die gemeinsam genutzten Daten zugreifen, als wären diese Teil ihres eigenen Speichers. So verwenden Sie sie:
Schritt 1: Erstellen Sie ein speicherzugeordnetes Dateiobjekt
Erstellen Sie in der C-Anwendung ein speicherzugeordnetes Dateiobjekt:
<code class="cpp">HANDLE hFile = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(DataStructure), "SharedMemory" );</code>
Schritt 2: Abrufen der Shared-Memory-Adresse
Beziehen Sie sowohl in den C- als auch in C#-Anwendungen die Adresse des Shared-Memory mithilfe des Dateizuordnungshandles:
void* pData = MapViewOfFile( hFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DataStructure) );
unsafe void* pData = MapViewOfFile( hFile, FileMapAccess.AllAccess, 0, 0, sizeof(DataStructure) );
Schritt 3: Daten schreiben (C)
In der C-Anwendung Daten in den gemeinsamen Speicher schreiben:
<code class="cpp">memcpy(pData, &data, sizeof(data));</code>
Schritt 4: Daten lesen (C#)
In der C#-Anwendung Daten aus dem gemeinsamen Speicher lesen:
<code class="csharp">unsafe { DataStructure data = *((DataStructure*)pData); }</code>
Fazit
Durch die Verwendung von speicherzugeordneten Dateien können Sie Daten effektiv zwischen Ihren C- und C#-Anwendungen austauschen. Dieser Ansatz ermöglicht eine schnelle und effiziente Datenübertragung und gewährleistet eine reibungslose Kommunikation zwischen verschiedenen Anwendungen.
Das obige ist der detaillierte Inhalt vonWie können speicherzugeordnete Dateien eine effiziente Datenfreigabe zwischen C- und C#-Anwendungen ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!