Um in der Lage zu sein, einige Benchmarks zu machen, muss ich den Windows-Festplatten-Cache lesen säubern. Wie kann ich das tun?
Tatsächlich möchte ich vergleichen, ob das Laden einer großen Unicode-Datei (UTF-8 oder UTF-16) von der Festplatte schneller ist oder nicht, wenn man bedenkt, dass ich im Speicher UTF-16 halte.
Ich weiß, dass es keinen signifikanten Unterschied geben sollte, aber um es zu benchmarken, muss ich sicher sein, dass diese Datei nicht zwischengespeichert wird - ich muss sehen, ob die Größe auf der Festplatte mehr oder weniger Einfluss hat als die Decodierung der Datei. p>
Jemand von Microsoft hat mir vor ein paar Jahren (damals in den Tagen von Windows XP) geholfen und mir eine Lösung gegeben, die meinen Bedürfnissen damals entsprach. Ich hatte bereits zwei Laufwerke in meiner Maschine, und was ich testen musste, war bereits auf dem Laufwerk D, und zum Glück musste ich keine Dateien auf meinem D-Laufwerk offen halten, wenn ich den Cache leeren wollte. Von der Windows-Datenträgerverwaltungsschnittstelle konnte ich meinen Laufwerksbuchstaben D: in einen anderen Buchstaben und dann wieder zurück ändern, und das Laufwerk D würde so funktionieren, als hätte es im Betriebssystem einen kalten Cache.
AFAIK, es ist leider nicht möglich den read Cache unter Windows zu löschen . Ich habe vor einigen Jahren einige Zeit damit verbracht habe nur herausgefunden, wie man den write -Cache spült
Wie ich es sehe, haben Sie drei Möglichkeiten, es sei denn, jemand anders hat etwas Magie gefunden:
EDIT: es ist tatsächlich möglich, den Lese-Cache zu leeren, zumindest auf Vista und später: Deaktivieren oder leeren Sie den Seitencache unter Windows . Es erfordert jedoch einen Aufruf an die nicht dokumentierte NtSetSystemInformation
NT-API. Außerdem kann der Lese-Cache für eine einzelne Datei einfach geleert werden, indem die Datei mit FILE_FLAG_NO_BUFFERING
specified geöffnet und der Handle erneut geschlossen wird.