Jak zwiększyć pamięć podręczną dysku systemu Windows 7

18

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ż LargeSystemCachewłączyć klucz rejestru, ale (po ponownym uruchomieniu) CacheSetnarzę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?

Sathyajith Bhat
źródło
3
Skąd masz informacje, że tylko 100 MB jest używanych do buforowania dysku? Z tego co wiem Windows domyślnie wykorzystuje całą wolną pamięć do buforowania dysku. Wartość tylko 100 MB wydaje mi się wartością minimalną.
Robert
1
Częścią problemu może być Java i JVM. Istnieje mnóstwo opcji do dostosowania JVM - publib.boulder.ibm.com/infocenter/javasdk/v6r0/… . Myślę, że najlepszym rozwiązaniem jest napisanie go w języku C ++ lub FreeBASIC (oba kompilują się do kodu natywnego i są ograniczone tylko tym, na co pozwala system operacyjny).
Natalie Adams

Odpowiedzi:

4

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.

Soren
źródło
2
Co to jest superpobierz i jak odnosi się do tego pytania?
jpaugh
4

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.

  1. Upewnij się, że jawnie uruchomiłeś CacheSet „As Administrator”. CacheSet powie, że wartości są poza zakresem, gdy coś pójdzie nie tak.
  2. Upewnij się, że rozmiar pamięci podręcznej jest podzielny przez 4 KB

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.

Vladimir Panteleev
źródło
0

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.

Jan Schejbal
źródło