2009-06-16 37 views
1

Ich versuche, die Leistung eines Windows-Programms zu vergleichen, wenn der Disk-Cache in seinem besten Zustand ist (wenn alle Dateien für das Programm ausgeführt werden, sind im Cache, ich führe es einfach mehrmals Holen Sie diesen Zustand), und wenn der Cache in seinem schlechtesten Zustand ist, ist das vollständig leer.Invalidate OS Disk Read Cache

Der einzige Weg, wie ich sicherstellen kann, dass der Cache vollständig leer ist, ist durch einen Neustart des Computers, aber das ist nicht ideal, da es zu viel Zeit in Anspruch nimmt. Gibt es eine Möglichkeit, dies ohne Neustart zu tun? Ich habe versucht, Sync, aber es nicht ungültig den Lese-Cache ...

Antwort

1

In Ihrem Anruf an CreateFile, enthalten die FILE_FLAG_NO_BUFFERING Flag. Weitere Informationen finden Sie unter CreateFile reference page bei MSDN. Beachten Sie insbesondere die requirements.

Wenn es zu mühsam ist, Ihren Code zu ändern, versuchen Sie, ein einfaches Dienstprogramm zu schreiben, um eine Datei zu lesen, die größer ist als der physische Speicher. Dies kann ausreichen, um die Dateien, die Ihnen wichtig sind, aus dem Dateisystem-Cache zu löschen.

+0

CreateFile mit diesem Flags scheint gut zu funktionieren, aber ich suche nach einer Möglichkeit, es für einen gesamten Ordner (und Unterordner) zu tun. Ich hoffe wirklich, dass ich nicht jede Datei durchlaufen sollte, da ich über einige Millionen Dateien in dem Ordner nachdenke, die ich für ungültig erklären muss. Über das Schreiben eines Dienstprogramms, das eine große Datei liest, wie kann ich garantieren, dass der Cache geleert wird? Vielleicht verwaltet Windows seinen Cache so, dass die gesamte Datei nicht zwischengespeichert wird und Platz für weitere Dateien bleibt. Oder vielleicht nicht ... eigentlich habe ich keine Ahnung. Wie auch immer, ich werde es versuchen und die Ergebnisse sehen. –

+0

Wenn Sie eine große Anzahl von Dateien durchlaufen, haben Sie nicht nur eine kleine Anzahl von CreateFile-Aufrufen, um dieses Flag hinzuzufügen? Es ist ein Teil des Öffnens der Datei zum Lesen, nicht ein zweistufiger Prozess, in dem Sie den Cache (für diese Datei) ungültig machen und dann öffnen. –