W systemie Windows 7 (64-bitowym) czytam 9000 plików o średniej wielkości. W sumie jest ponad 200 MB danych. Za pomocą Java (JDK 1.6.21) iteruję po plikach. Około 1400 pierwszych jedzie z pełną prędkością, ale potem prędkość spada do 4 ms na plik. Okazuje się, że główny koszt jest ponoszony po prostu przez otwarcie plików.
Otwieram pliki za pomocą new FileInputStream
(i oczywiście zamykam je na czas, aby uniknąć wycieków plików). Po pewnym dochodzeniu widzę, że pamięć podręczna dysku systemu Windows zużywa około 100 MB pamięci RAM, chociaż mam 8 GiB. Próbowałem zwiększyć rozmiar pamięci podręcznej za pomocą narzędzia CacheSet , ale wszelkie podane przeze mnie wartości są uważane za poza zakresem .
Próbowałem również LargeSystemCache
włączyć klucz rejestru, ale (po ponownym uruchomieniu) CacheSet
narzędzie nadal wskazuje, że używam 100 MB pamięci podręcznej (i nie zwiększa się podczas uruchomienia testowego). Czy ktoś ma jakieś sugestie, aby „zachęcić” system Windows 7 do buforowania moich 9000 plików?
źródło
Odpowiedzi:
Funkcja Superfetch nie buforuje całego dużego pliku, a jedynie dostępne części. Dlatego dostęp do tego pliku nadal wymaga odczytu dysku. Pamięć podręczna dysku o wielkości 210 MB, podobnie jak moja, może buforować wszystko ze wszystkich małych plików w systemie Windows. A wydajność jest zauważalna. Wątpię jednak, aby miałoby to wpływ na szybsze systemy.
źródło
Zauważyłem również, że CacheSet ma pewne problemy z dużymi wartościami, być może dlatego, że jest to aplikacja 32-bitowa od 2006 roku. Poszedłem i napisałem 64-bitowy program wokół tego samego API, który pozwala ustawić rozmiary pamięci podręcznej powyżej 4 GB: http: / /blog.thecybershadow.net/2012/12/14/64-bit-cacheset/
Uwaga: W artykule CacheSet wspomniano o CacheMan, jednak najnowsza wersja wydaje się używać tego samego interfejsu API co CacheSet - jest ona po prostu spakowana w interfejs użytkownika z wieloma ustawieniami wstępnymi i innymi funkcjami.
źródło
Wiem, że to stare, ale dla innych, którzy napotykają ten problem: musisz ręcznie uruchomić CacheSet z uprawnieniami administratora. Jeśli tego nie zrobisz, pojawi się błąd OutOfRange; NIE poprosi automatycznie o uprawnienia.
źródło