Windows 7 disk önbelleğini artırmak


18

Windows 7 (64 bit) altında, 9000 orta boyutlu dosyayı okuyorum. Toplamda 200 MB'tan fazla veri var. Java kullanarak (JDK 1.6.21) Dosyalar üzerinde yineliyorum. İlk 1400 ya da öylesine tam hızda gitmek ancak daha sonra dosya başına 4ms düşer. Dosyaları açarak ana maliyetin ortaya çıktığı ortaya çıktı.

Kullanarak dosyaları açıyorum new FileInputStream (ve tabii ki dosya sızıntılarını önlemek için zamanında kapama). Bazı araştırmalardan sonra, 8 disk kullanabildiğim halde Windows disk önbelleğinin yalnızca 100 MB RAM kullandığını görüyorum. Kullanarak önbellek boyutunu artırmayı denedim CacheSet aracı ancak sağladığım herhangi bir değer menzil dışında .

Ben de etkinleştirmeyi denedim LargeSystemCache kayıt defteri anahtarı, ancak (yeniden başlattıktan sonra) CacheSet aracı hala 100 MB önbellek kullandığımı gösteriyor (ve test çalışması sırasında artmıyor). Windows 7'yi 9000 dosyalarımı önbelleğe almaya "teşvik etmek" için önerisi olan var mı?


3
Disk önbelleği için yalnızca 100 MB kullanıldığı bilgisini nereden aldınız? Bildiğim kadarıyla, Windows varsayılan olarak disk önbelleğe almak için tüm boş belleği kullanır. Sadece 100 MB'lık bir değer bana asgari bir değer gibi görünüyor.
Robert

1
Sorunun bir kısmı Java olabilir ve bu da JVM'dir. JVM'yi çimdiklemek için tonlarca seçenek var - publib.boulder.ibm.com/infocenter/javasdk/v6r0/... . En iyi seçeneğinizin sadece C ++ veya FreeBASIC (her ikisi de yerel kodu derleyen ve yalnızca işletim sisteminin izin verdiği şekilde sınırlı olan) yazmak olduğunu düşünüyorum.
Natalie Adams

Yanıtlar:


4

Superfetch, büyük bir dosyayı, yalnızca erişilenleri önbelleğe almaz. Bu yüzden bu dosyaya erişmek hala disk okumayı gerektiriyor. Benimki gibi 210 MB'lik bir disk önbelleği, Windows'daki tüm bu küçük dosyalardan her şeyi önbelleğe alabilir. Ve performans göze çarpıyor. Yine de daha hızlı sistemler üzerinde etkili olacağından şüpheliyim.


2
Süper kağıt nedir ve bu soru ile nasıl bir ilgisi var?
jpaugh

4

CacheSet aracını kullanarak önbellek boyutunu artırmayı denedim ancak sağladığım herhangi bir değer aralık dışında sayılıyor.

  1. Açıkça CacheSet "Yönetici olarak" çalıştırdığınızdan emin olun. CacheSet, değerlerin ne zaman aralık dışı olduğunu söyler. her şey ters gidiyor.
  2. Önbellek boyutunun 4 KB ile bölünebildiğinden emin olun

Ayrıca, CacheSet'in büyük değerlerle ilgili bazı sıkıntıları olduğunu fark ettim, muhtemelen 2006'dan itibaren 32 bitlik bir uygulamadır. Aynı API'nin çevresine 64GB'lık bir program yazdım ve önbellek boyutlarını 4GB'ın üzerinde ayarladım: http://blog.thecybershadow.net/2012/12/14/64-bit-cacheset/

Not: CacheSet makalesinde CacheMan'a değinilir, ancak en son sürüm CacheSet ile aynı API’yı kullanıyor gibi görünmektedir;


0

Bunun eski olduğunu biliyorum, ancak bu soruna rastlayanlar için: CacheSet'i yönetimsel ayrıcalıklarla manuel olarak çalıştırmanız gerekir. Bunu yapmazsanız, OutOfRange hatasını alırsınız; otomatik olarak ayrıcalık istemeyecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.