En Windows 7 (64 bits), estoy leyendo 9000 archivos de tamaño moderado. En total, hay más de 200 MB de datos. Usando Java (JDK 1.6.21) estoy iterando sobre los archivos. Los primeros 1400 más o menos van a toda velocidad, pero luego la velocidad cae a 4 ms por archivo. Resulta que el costo principal se incurre simplemente abriendo los archivos.
Estoy abriendo los archivos usando new FileInputStream
(y, por supuesto, cerrándolos a tiempo para evitar fugas de archivos). Después de investigar un poco, veo que el caché de disco de Windows usa solo 100 MB de RAM, aunque tengo 8 GiB disponibles. Intenté aumentar el tamaño de la memoria caché con la herramienta CacheSet , pero los valores que proporciono se consideran fuera de rango .
También intenté habilitar la LargeSystemCache
clave de registro pero (después de reiniciar) la CacheSet
herramienta aún indica que estoy usando 100 MB de caché (y no aumenta durante la ejecución de la prueba). ¿Alguien tiene alguna sugerencia para "alentar" a Windows 7 a almacenar en caché mis archivos 9000?
fuente
Respuestas:
Superfetch no almacena en caché todo un archivo grande, solo las partes a las que se accede. Por lo tanto, acceder a ese archivo requiere lectura de disco todavía. Un caché de disco en 210mb como el mío puede almacenar en caché todo, desde todos esos pequeños archivos en Windows. Y el rendimiento es notable. Sin embargo, dudo que tenga un impacto en sistemas más rápidos.
fuente
Además, noté que CacheSet tiene algunos problemas con los valores grandes, posiblemente porque es una aplicación de 32 bits del 2006. Fui y escribí un programa de 64 bits alrededor de la misma API, que permite configurar tamaños de caché de más de 4 GB: http: / /blog.thecybershadow.net/2012/12/14/64-bit-cacheset/
Nota: El artículo de CacheSet menciona CacheMan, sin embargo, la última versión parece usar la misma API que CacheSet: solo está empaquetada en una interfaz de usuario con un montón de ajustes preestablecidos y otras funciones.
fuente
Sé que esto es antiguo, pero para otros que se encuentran con este problema: debe ejecutar CacheSet con privilegios administrativos manualmente. Si no lo hace, obtendrá el error OutOfRange; NO solicitará automáticamente privilegios.
fuente