Sous Windows 7 (64 bits), je lis 9 000 fichiers de taille moyenne. Au total, il y a plus de 200 Mo de données. Utilisation de Java (JDK 1.6.21) Je parcours les fichiers. Les premiers 1400 environ vont à pleine vitesse, mais la vitesse chute à 4 ms par fichier. Il s'avère que le coût principal est simplement dû à l'ouverture des fichiers.
J'ouvre les fichiers en utilisant new FileInputStream
(et bien sûr, je les ferme à temps pour éviter les fuites). Après quelques recherches, je constate que le cache disque de Windows n’utilise que 100 Mo environ de RAM alors que je dispose de 8 GiB. J'ai essayé d'augmenter la taille du cache à l'aide de l'outil CacheSet , mais les valeurs fournies sont considérées hors de portée .
J'ai également essayé d'activer la clé de registre LargeSystemCache
, mais (après le redémarrage), l'outil CacheSet
indique toujours que j'utilise 100 Mo de cache (et n'augmente pas pendant l'exécution du test). Quelqu'un a-t-il des suggestions pour "encourager" Windows 7 à mettre en cache mes 9000 fichiers?
J'ai essayé d'augmenter la taille du cache à l'aide de l'outil CacheSet, mais toutes les valeurs que je fournis sont considérées comme hors limites.
De plus, j'ai remarqué que CacheSet avait quelques problèmes avec les grandes valeurs, probablement parce qu'il s'agissait d'une application 32 bits datant de 2006. J'ai écrit un programme 64 bits autour de la même API, ce qui permet de définir une taille de cache supérieure à 4 Go: http://blog.thecybershadow.net/2012/12/14/64-bit-cacheset/
Remarque: L'article CacheSet mentionne CacheMan, mais la dernière version semble utiliser la même API que CacheSet - elle est simplement intégrée dans une interface utilisateur avec un ensemble de préréglages et d'autres fonctionnalités.
Superfetch ne met pas en cache la totalité d'un fichier volumineux, mais uniquement les parties auxquelles on accède. Donc, accéder à ce fichier nécessite une lecture du disque. Un cache disque à 210 Mo comme le mien peut mettre en cache tout ce qui se trouve dans tous ces petits fichiers dans Windows. Et la performance est remarquable. Je doute cependant que cela aurait un impact sur des systèmes plus rapides.
Je sais que c'est vieux, mais pour les autres personnes qui rencontrent ce problème: Vous devez exécuter CacheSet avec les privilèges administratifs manuellement. Si vous ne le faites pas, obtiendra l'erreur OutOfRange; il ne demandera pas automatiquement des privilèges.