Ich habe nicht viel Erfahrung mit Memory-Mapped I/O, aber nach dem sie zum ersten Mal mit an Ich bin fassungslos, wie schnell sie sind. In meinen Leistungstests sehe ich, dass das Lesen von im Speicher abgelegten Dateien 30 Mal schneller ist als das Lesen von normalem C++ - Standard.Warum ist das Lesen aus einer Memory-Mapped-Datei so schnell?
Meine Testdaten sind eine 3-GB-Binärdatei, sie enthält 20 große Gleitkomma-Arrays mit doppelter Genauigkeit. Die Art und Weise, wie mein Testprogramm strukturiert ist, rufe ich die Lesemethode eines externen Moduls auf, die speicherprogrammierte I/O hinter den Kulissen verwendet. Jedes Mal, wenn ich die read-Methode aufruft, gibt dieses externe Modul einen Zeiger und eine Größe der Daten zurück, auf die der Zeiger zeigt. Nach der Rückkehr von dieser Methode rufe ich memcpy auf, um den Inhalt des zurückgegebenen Puffers in ein anderes Array zu kopieren. Da ich ein Memcpy mache, um Daten aus der Memory-Mapped-Datei zu kopieren, erwartete ich, dass die Memory-Mapped-Reads nicht wesentlich schneller als normale Stdio sind, aber ich bin erstaunt, dass es 30x schneller ist.
Warum aus einer Memory-Mapped-Datei liest so schnell?
PS: Ich benutze eine Windows-Maschine. Ich habe meine E/A-Geschwindigkeiten gemessen, und die maximale Plattentransferrate meines Geräts liegt bei 90 MiB/s.
Sie können die Antworten finden [hier] (http://stackoverflow.com/questions/192527/what-are-the-advantages-of-memory-maped-files) –
@SteveLorimer: Ich habe diese Seite vorher gelesen zum Posten. Wenn die Daten aus dem Thread nicht bereits im Speicher vorhanden sind, muss das Betriebssystem die Daten von der Festplatte abrufen. Was ich in meinem Test sehe, ist, dass es keinen Platten-I/O gibt, der einer 3GB Datenübertragung entsprechen würde, ich sehe nur eine Übertragung, die sich auf 2630 Bytes beläuft. Wenn ich jedoch den Inhalt des gemerkten Arrays untersuche, stimmen sie mit dem erwarteten Datenbyte mit dem Byte überein. – DigitalEye
Standard-Benchmark-Gefahr. [Schau hier] (http://superuser.com/questions/417057/is-there-a-way-to-reset-windows-file-cache). –