Zarządzanie pamięcią
Wersja A
Program demonstrujący działanie słabych referencji.
- Działanie programu:
- zapytać o katalog
- wczytać wszystkie pliki *.txt z podanego katalogu
- pokazywać menu i dawać użytkownikowi możliwość wyboru opcji do chwili
wyboru opcji exit
- pozycje menu
- <numer pliku>: <nazwa pliku> - wypisanie pierwszych
pięciu linii pliku (jedna pozycja dla każdego wczytanego pliku)
- C: collect unused memory - zwolnienie nieużywanej pamięci
- X: exit
- w menu powinna znaleźć się także informacja o ilości zajętej pamięci
- Wymagane klasy i ich składowe (można stworzyć więcej składowych):
- klasa główna
- static void Main(string[]
args)
- TextFilesCache - klasa
trzymająca wczytane pliki
- public TextFilesCache( string
dirName ) - konstruktor wczytujący wszystkie pliki *.txt z
podanego katalogu
- public void ShowFile( int
idx ) - wypisanie 5 pierwszych linii pliku tekstowego, w przypadku
gdy obiekt został usunięty: informacja na konsolę oraz powtórne wczytanie
pliku
- public int NumFiles
- tylko get
- tablica lub kolekcja obiektów TextFilesCacheItem
- TextFilesCacheItem -
klasa odpowiadająca jednemu wczytanemu plikowi
- public string name;
- public WeakReference weakReference;
- słaba referencja do obiektu TextFile
- TextFile - klasa trzymająca
linie pliku tekstowego
- public TextFile( string
fileName ) - konstruktor wczytujący wskazany plik
- public int NumLines
- tylko get
- indexer od numeru linii - pobranie linii o wskazanym numerze
- zakładając, że tf
jest obiektem klasy TextFile,
konstrukcja: tf[0]
powinna zwrócić pierwszą linię tego pliku lub wyrzucić wyjątek,
gdy brak
- tablica lub kolekcja linii pliku
- Sugestie:
- DirectoryInfo, FileInfo
- StreamReader
- GC
- Przykładowe działanie programu:
--- Total Memory: 10216
Directory to get *.txt files from: d:\test
----------------------------
--- Total Memory: 169960
0: d:\test\o_01.txt
1: d:\test\o_02.txt
2: d:\test\o_03.txt
3: d:\test\DX.TXT
4: d:\test\ws.txt
C: collect unused memory
X: exit
---> 0
#### content of file: d:\test\o_01.txt
* Definicje
- klient
- kawaek kodu uywajcy moliwoci obiektu
- kontener
- komponent
----------------------------
--- Total Memory: 169960
0: d:\test\o_01.txt
1: d:\test\o_02.txt
2: d:\test\o_03.txt
3: d:\test\DX.TXT
4: d:\test\ws.txt
C: collect unused memory
X: exit
---> C
----------------------------
--- Total Memory: 55868
0: d:\test\o_01.txt
1: d:\test\o_02.txt
2: d:\test\o_03.txt
3: d:\test\DX.TXT
4: d:\test\ws.txt
C: collect unused memory
X: exit
---> 0
#### content of file: d:\test\o_01.txt
!!! weak reference is not alive - reloading
* Definicje
- klient
- kawaek kodu uywajcy moliwoci obiektu
- kontener
- komponent
----------------------------
--- Total Memory: 80444
0: d:\test\o_01.txt
1: d:\test\o_02.txt
2: d:\test\o_03.txt
3: d:\test\DX.TXT
4: d:\test\ws.txt
C: collect unused memory
X: exit
---> 0
#### content of file: d:\test\o_01.txt
* Definicje
- klient
- kawaek kodu uywajcy moliwoci obiektu
- kontener
- komponent
----------------------------
--- Total Memory: 80444
0: d:\test\o_01.txt
1: d:\test\o_02.txt
2: d:\test\o_03.txt
3: d:\test\DX.TXT
4: d:\test\ws.txt
C: collect unused memory
X: exit
--->