Speichermapping-Dateien verwenden virtuellen Speicher, um Dateien auf den Adressraum des Prozesses zuzuordnen, danach manipuliert der Prozess die Datei genauso wie die Adresse im Prozessraum, zum Beispiel mit memcpy und anderen Speicheroperationen in der C-Sprache. Diese Methode lässt sich gut in Situationen einsetzen, in denen eine Datei oder eine große Datei häufig verarbeitet werden muss und die IO-Verarbeitungseffizienz höher ist als die eines gewöhnlichen IO Gemeinsamer Speicher ist ein Spezialfall von speicherabgebildeten Dateien, bei denen ein Speicherstück statt einer Datei auf der Festplatte abgebildet wird. Das Thema gemeinsamer Speicher ist Prozess, und das Betriebssystem weist standardmäßig jedem Prozess einen Speicherplatz zu, wobei jeder Prozess nur auf einen vom Betriebssystem zugewiesenen Speicher zugreifen darf, aber nicht auf andere Prozesse. Und manchmal muss man auf denselben Speicher zwischen verschiedenen Prozessen zugreifen – was sollte man tun? Das Betriebssystem stellt eine API zur Verfügung, um Zugriff auf gemeinsamen Speicher zu schaffen, und Prozesse, die Speicher teilen müssen, können über diese definierten APIs auf den von mehreren Prozessen geteilten Speicher zugreifen; jeder Prozess greift auf diesen Speicher zu, als würde er auf eine Datei auf einer Festplatte zugreifen. Das .Net 4.0 führt die System.IO ein. MemoryMappedFiles-Namensraum, eine Klasse, die die Windows Shared Memory-bezogenen APIs kapselt und es .Net-Programmierern erleichtert, Speichermapping-Dateien zu verwenden. Nutze gemeinsam genutzten Speicher in C#. Der folgende Code für App1 ermöglicht es dem Benutzer, eine Textzeile in den gemeinsamen Speicher einzugeben; App2 aktualisiert die Konsole ständig und gibt die neuesten Inhalte des gemeinsamen Speichers aus; App3 implementiert die gleichen Funktionen wie App2, aber die Lesemethode ist anders.
Zwei Methoden wurden verwendet, um die Daten zu lesen. Da die Kommunikation zwischen Prozessen zuvor selten verwendet wurde, ist diese Methode nur ein vorläufiges Verständnis. Das Programm ist zu rudimentär, und es gibt viele Dinge, die nicht bewertet werden. Zum Beispiel, wie man einen gemeinsamen Speicher erstellt, wie man ihn abruft und löscht usw.
|