2010-08-26 3 views
8

Possible en double:
How to invalidate the file system cache?Comment vider le cache de lecture de disque sous Windows?

Afin de pouvoir si certains points de référence dont j'ai besoin de nettoyage de disque Windows cache de lecture. Comment puis-je faire ceci?

En fait, je veux comparer si le chargement d'un gros fichier Unicode (UTF-8 ou UTF-16) à partir du disque est plus rapide ou non, compte tenu du fait qu'en mémoire je garde UTF-16. Je sais que cela ne devrait pas être une différence significative, mais pour l'évaluer, je dois être sûr que ce fichier n'est pas en cache - j'ai besoin de voir si la taille sur le disque a plus ou moins d'impact que de décoder le fichier.

+0

Ce que vous cherchez est aussi appelé "drop the cache". Sous Linux, vous pouvez le faire en écrivant '/ proc/sys/vm/drop_caches'. Aucune idée sur Windows si ... – sleske

+0

@Mehrdad vous avez réalisé que cette question si à partir de 2010 et celui de 2011? – Jack

+0

@Jack: Oui désolé, en effet je l'ai fait, mais en même temps, j'avais posté la réponse à cette question sur l'autre question il y a plusieurs mois ... donc soit cette question devrait être fermée comme une dupe de celui-ci, ou l'inverse.J'ai décidé d'opter pour le dernier parce que j'ai vu * tonnes * de copies de cette question (beaucoup de 2010) quand j'ai googlé, et j'ai pensé que ce serait beaucoup moins de peine de les marquer tous comme une dupe que d'essayer pour trouver la première copie de cette question sur StackOverflow (il y a des tonnes). : \ Sorry .. – Mehrdad

Répondre

3

AFAIK, il est malheureusement impossible de défausse le cache de lecture sous Windows. J'ai passé quelque temps à regarder dans ce domaine il ya quelques années, et seulement découvert comment vider le écrire cache.

Comme je le vois, vous avez trois options, à moins que quelqu'un d'autre a trouvé un peu de magie:

  1. Si possible, faites votre fichier de lecture d'E/S en mode unbuffered.
  2. Chaque fois que vous souhaitez référencer, créez une nouvelle copie des données de test spécifiant le mode sans tampon lors de la création de la nouvelle copie ( doit conserver la copie du cache de lecture, mais je n'ai pas testé).
  3. Allouer assez de mémoire que Windows doit jeter le cache disque (pouah!).

EDIT: il est en effet possible de vider le cache de lecture, au moins sur Vista et plus tard: Disable or flush page cache on Windows. Il nécessite cependant un appel à l'API NT non documentée NtSetSystemInformation. En outre, pour un seul fichier, le cache de lecture peut être vidé simplement en ouvrant le fichier avec FILE_FLAG_NO_BUFFERING spécifié et en fermant à nouveau le handle.

+1

Notez que le programme 'flushmem' de la réponse de Sron Sbarnea implémente la solution 3. Cela fonctionne, mais allouer beaucoup de mémoire est apparemment assez lent (probablement parce qu'il cause beaucoup de pagination/échange). – sleske

+1

@sleske: oui, ce n'est pas une jolie solution - cela force Windows à découper les ensembles de travail pour tous les processus, à faire de pageout pour échanger ... et ensuite il y aura généralement immédiatement une activité de page après. – snemarch

+1

'Notez que le programme flushmem de la réponse de Sron Sbarnea implémente la solution 3. Cela fonctionne, mais l'allocation de beaucoup de mémoire est apparemment assez lente (probablement parce qu'elle cause beaucoup de pagination/échange). Je l'ai couru et Chrome (y compris cette même page) a juste disparu. Doh! Heureusement, quand j'ai couru Chrome, il m'a permis de restaurer ma session, donc c'était juste un inconvénient mineur; néanmoins, soyez prudent d'être en sécurité, vous devez tout quitter avant de l'utiliser (ce qui bien sûr en fait une mauvaise solution). ': - /' – Synetech

3

Quelqu'un de Microsoft m'a aidé avec cela il ya quelques années (à l'époque de Windows XP) et m'a donné une solution qui répondait à mes besoins à l'époque. J'avais déjà deux disques dans ma machine, et ce que j'avais besoin de tester était déjà sur le disque D, et heureusement je n'avais pas besoin de garder les fichiers ouverts sur mon disque D quand je voulais vider le cache. À partir de l'interface de gestion de disque de Windows, je pourrais changer ma lettre de lecteur de D: à une autre lettre, puis de nouveau en arrière, et le lecteur de D fonctionnerait comme s'il avait un cache froid dans le système d'exploitation.

Questions connexes