Memory Mapped Files sind ein Mechanismus, Dateien im Speicher zu bearbeiten.
Dabei wird die Datei vollständig in den Speicher geladen und von deiner Anwendung ein soganannter View auf dieses Speicherbereich (global, btw) benutzt, um Teile der Datei aus dem Speicher in den prozesseigenen Speicher zu befördern. das können nur einzelne Teile der Datei sein, oder auch die ganze. Diesen Speicherbereich kannst du bearbeiten wie du willst und durch flushen des Maps die Änderungen sofort in den View übernehmen. Die Daten werden aber nicht in die Datei auf der Festplatte geschrieben, sondern nur in die Filemap im globalen Speicher.
Das Ganze hat den Vorteil, daß du, wenn du viele zufällige Dateizugriffe hast, die Festplatte nicht unnötig belastest. Der Arbeitsspeicher ist viel schneller als die Festplatte, und somit bleibt zum einen Festplattenleistung für andere Dinge übrig (Windows, Multitasking, auch wenn's nicht immer klappt, sollte mand ran denken...) und deine Operationen laufen im Endeffekt schneller ab.
Das lohnt sich aber wirklich nur, wenn du die Daten oft verändern musst, z.B. für datenbankartige Anwendungen. Luckie wollte z.B. seinen Filesplitter auf Memory Mapped Files umstellen, da dabei nur die Datei sequenziell gelesen bzw geschrieben wird, was so oder so sein muss, hätte sich das nicht gelohnt, eher im Gegenteil, der Speicherbedarf wäre ohne Performancegewinn angestiegen.
Ein File Mapping Object erzeugst du mit der Funtkion CreateFileMapping, die als Datei keine Pfadangabe sondern ein Dateihandle annimmt, die Datei musst du also schon selbst geöffnet haben.
Im
PSDK findest du das Thema File Mapping unter:
Base Services -> Storage -> Storage Overview -> File Management -> File Mapping