No Windows 7 (64 bits), estou lendo 9000 arquivos de tamanho médio. No total, existem mais de 200 MB de dados. Usando Java (JDK 1.6.21), eu estou repetindo os arquivos. Os primeiros 1400, aproximadamente, vão a toda velocidade, mas a velocidade cai para 4ms por arquivo. Acontece que o custo principal é incorrido simplesmente abrindo os arquivos.
Estou abrindo os arquivos usando new FileInputStream
(e, claro, fechá-los a tempo de evitar vazamentos). Após algumas investigações, vejo que o cache do disco do Windows está usando apenas 100 MB ou mais de RAM, embora eu tenha 8 GiB disponíveis. Tentei aumentar o tamanho do cache usando a ferramenta CacheSet , mas todos os valores que forneço são considerados fora do intervalo .
Também tentei ativar a LargeSystemCache
chave do Registro, mas (após a reinicialização) a CacheSet
ferramenta ainda indica que estou usando 100 MB de cache (e não aumenta durante a execução do teste). Alguém tem alguma sugestão para "incentivar" o Windows 7 a armazenar em cache meus arquivos 9000?
fonte
Respostas:
O Superfetch não armazena em cache todo um arquivo grande, apenas as partes acessadas. Portanto, para acessar esse arquivo, é necessário ler o disco ainda. Um cache de disco de 210mb como o meu pode armazenar em cache tudo, desde todos esses pequenos arquivos no Windows. E o desempenho é perceptível. Duvido, porém, que isso teria impacto em sistemas mais rápidos.
fonte
Além disso, notei que o CacheSet tem alguns problemas com valores grandes, possivelmente por ser um aplicativo de 32 bits a partir de 2006. Escrevi um programa de 64 bits em torno da mesma API, que permite definir tamanhos de cache acima de 4 GB: http: / /blog.thecybershadow.net/2012/12/14/64-bit-cacheset/
Nota: O artigo CacheSet menciona o CacheMan, no entanto, a versão mais recente parece usar a mesma API que o CacheSet - é apenas empacotada em uma interface do usuário com várias predefinições e outras funcionalidades.
fonte
Sei que isso é antigo, mas para outras pessoas que enfrentam esse problema: Você precisa executar o CacheSet manualmente com privilégios administrativos. Caso contrário, você receberá o erro OutOfRange; NÃO pedirá privilégios automaticamente.
fonte