Ich habe einen Windows Server 2008 R2-Dateiserver, der einige große Dateien enthält, die in seltenen Fällen sehr wichtig sind, um so schnell wie möglich auf ein anderes System kopiert zu werden.
Gibt es eine Möglichkeit, zu erzwingen, dass diese Dateien immer im RAM zwischengespeichert werden?
TransmitFile
Funktion zu verwenden . Durch Öffnen einer Datei undFILE_FLAG_SEQUENTIAL_SCAN
anschließendesTransmitFile
Senden der Dateidaten über den Socket ruft Windows aggressiv vorab ab, um Verzögerungen zu minimieren, und führt die Socket-Schreibvorgänge direkt aus dem Systemcache aus, wodurch unnötige Systemaufrufe zum Kopieren in und aus dem Benutzerbereich entfernt werden.Antworten:
Meistens besteht der Engpass nicht darin, die Datei von der Festplatte in den Arbeitsspeicher zu bringen, sondern vom Arbeitsspeicher in das Netzwerk. Sofern das System nicht sehr aktiv ist oder wenig RAM hat, sollte Windows das Zwischenspeichern von Dateien ziemlich intelligent handhaben.
Möglicherweise möchten Sie einige Tests durchführen und feststellen, ob es tatsächlich einen Engpass in Ihrem System gibt, der eine deutliche Verbesserung bewirken würde, indem bestimmte Dateien im Speicher bleiben und nicht auf die Festplatte übertragen werden, wenn Windows der Ansicht ist, dass sie auf der Festplatte gespeichert werden sollten. Ich wette, Sie sparen sehr wenig Zeit, da der Engpass höchstwahrscheinlich das Netzwerk ist. Wenn die Datei in die Warteschlange gestellt wird, um zum Netzwerk zu gelangen, füllt das Laufwerk bereits Puffer im Speicher, während es die Datei aus dem Netzwerk zieht Fahrt.
Die einzige wirklich zuverlässige Möglichkeit, Datendateien im Speicher zu speichern, die ich kenne, besteht darin, eine RAM-Disk zu erstellen und die Dateien dort zu kopieren, vorausgesetzt, sie sind statisch. Andernfalls haben Sie einen Stromausfall und sie sind weg.
Andernfalls möchten Sie möglicherweise in viel RAM und Hochgeschwindigkeitslaufwerke investieren. Möglicherweise sogar eine gespiegelte RAID-Konfiguration, da diese eine hohe Leseleistung (langsameres Schreiben) aufweist. Ich würde Windows und den Speichermanager das tun lassen und mich darauf konzentrieren, die Zugriffszeit mit besseren Subsystemen (schnelle Festplatte, RAID, viel Speicher, hohe Geschwindigkeit und hochwertige Netzwerkkarte) zu minimieren, anstatt sie bis zum Debuggen oder zur Fehlerbehebung zu optimieren könnte später ein Schmerz werden.
quelle
Sie können Supercache oder andere alternative Cache-Lösungen ausprobieren oder eine SSD mit Hochgeschwindigkeits-Lesezugriff verwenden. Dadurch wird fast jede Netzwerkverbindung ziemlich einfach gesättigt.
Die einzige andere Option, die meiner Meinung nach nicht Ihren Anforderungen entspricht, aber ich werde sie erwähnen:
Wenn Sie die Datei in Ihrer Anwendung SCHREIBEN, können Sie versuchen, Folgendes zu erstellen:
FILE_ATTRIBUTE_TEMPORARY und FILE_FLAG_DELETE_ON_CLOSE
Dies weist Windows an, zu versuchen, Dateien im RAM statt auf der Festplatte zu speichern. Ich glaube nicht, dass dies Ihren Anforderungen entspricht, aber Sie können mehr unter http://msdn.microsoft.com/en-us/library/aa363858% lesen 28VS.85% 29.aspx # caching_behavior
Steve Radich - http://www.BitShop.com/blogs.aspx
quelle
Es gibt keinen Standardweg, dies zu tun. Windows fehlen solche Haken. Wenn dies für Sie wirklich wichtig ist, können Sie versuchen, die Windows-Algorithmen zum Zwischenspeichern von Dateien zu spielen, indem Sie häufig über das Netzwerk auf die Datei zugreifen. Das sollte die Datei zwischengespeichert halten, aber es gibt keine Garantien. IIRC, Sie müssen nicht die gesamte Datei lesen, um die gesamte Datei zwischenzuspeichern. Daher sollte das Lesen einer Teilmenge der Datei ausreichend sein.
quelle
Ja, es gibt eine Möglichkeit, den OS Memory Manager auszutricksen und die gesamte Datei / den gesamten Ordner in den OS System-Cache zu laden. Schauen Sie sich den Beitrag hier an: http://www.arcgis.com/home/item.html?id=08a5a05ff82446bb8a8befad03b1bb86
quelle
Sie können Dateien mithilfe von Speicherzuordnungsdateien vorab zuordnen, um die Arbeit zu beschleunigen. Https://www.microsoft.com/store/apps/9N9TWRVC493H
quelle