2013-06-25 18 views
7

Mam dość nietypową prośbę: Chciałbym załadować wszystkie pliki z określonego folderu (do tej pory łatwe). Potrzebuję czegoś z bardzo małym zasięgiem pamięci.Odczyt wszystkich plików w folderze

Teraz to się komplikuje (przynajmniej dla mnie). Nie potrzebuję przechowywać ani używać zawartości plików - po prostu muszę wymusić mechanizm buforowania na poziomie bloku, aby buforować wszystkie bloki używane przez ten konkretny folder.

Wiem, że istnieje wiele różnych metod (BinaryReader, StreamReader itd.), Ale moja sprawa jest dość szczególny, ponieważ ja nie dbam o treści ...

Każdy pomysł co byłoby najlepszym sposobem jak to osiągnąć?

Czy powinienem używać małego bufora? Ale ponieważ wypełniłaby się szybko, czy opróżnienie bufora nie spowolniłoby operacji?

Dzięki, Martin

+0

Jaki jest Twój * ostateczny * przypadek użycia? – ken2k

+0

Witaj ken2k, Chciałbym stworzyć małe narzędzie, które może zmusić system Windows do przechowywania plików w gotowości pamięci podręcznej. Specjalnie zaprojektowany dla produktu o nazwie Usługi Provisioning Services (przesyłanie strumieniowe systemów operacyjnych): http://blogs.citrix.com/2012/10/25/pvs-internals-1-cache-manager/ –

Odpowiedz

2

miałbym być może memory map pliki i następnie pętla wokół dostępu element każdego pliku w regularnych odstępach czasu (blok odstępem).

Zakładając oczywiście, że jesteś w stanie korzystać z .Net 4.0.

W kodzie psuedo chcesz zrobić coś takiego:

using (var mmf = MemoryMappedFile.CreateFromFile(path)) 
{  
    for (long offset = 0 ; offset < file.Size ; offset += block_size) 
    { 
     using (var acc = accessor = mmf.CreateViewAccessor(offset, 1)) 
     { 
      acc.ReadByte(offset); 
     } 
    } 
} 

Ale pod koniec dnia, każda z tych metod mają różne charakterystyki pracy, więc może trzeba użyć trochę prób i błędów, aby znaleźć która jest najbardziej wydajna.

1

Po prostu przeczytałbym te pliki. Gdy to zrobisz, CacheManager w NTFS automatycznie buforuje te pliki i nie musisz się o nic martwić - to jest dokładnie rola CacheManagera, a czytając te pliki, dajesz mu wskazówkę, że te pliki powinny być buforowane.