2011-07-17 18 views
5

Mam zestaw obrazów zapisanych w tablicy 3D typu Int16, liczba obrazów i pamięci podręcznej może osiągnąć do 600 lub więcej obrazów, które wpływają na wydajność pamięci, jaką jest wydajność usuwania pamięci. Słyszałem o układaniu pamięci, które może usprawnić zarządzanie pamięcią, ponieważ ustawia elementy tablicy podrzędnej w oddzielnej porcji.
- Czy mogę używać układania pamięci w moim przypadku?
- jeśli tak, jak mogę go użyć?Zarządzanie płytkami pamięci i dużymi obiektami C#

+1

Jak zdefiniowana jest twoja tablica? 'new short [n] [] []' lub 'new short [x, y, z]'? Innymi słowy, czy jest to tak naprawdę wielowymiarowa tablica, czy też jest to poszarpana tablica? Skąd wiadomo, że ma to wpływ na wyniki GC? – svick

+1

600-owskie obiekty są niczym. Weź profilera pamięci i zobacz, co się naprawdę dzieje. – sisve

+0

@ Sierpień moja tablica jest w krótkim formularzu [x, y, z], ponieważ szukałem dużo z powodu przecieku pamięci mam i okazało się, że duże obiekty wpływają na wydajność GC i niektórzy ludzie muszą zadzwonić GC. Zbierz w takim przypadku, więc co jest lepsze krótki [x, y, z] lub krótki [x] [y] [z] ?, Dziękujemy za odpowiedź –

Odpowiedz

3

Czy mogę używać układania pamięci w moim przypadku?

Tak. Tablica 3d int16 [,,] musi być JEDNYM blokiem pamięci. Połóż to na plasterki i już są mniejsze. ([] [,]).

Reszta zależy od Twoich konkretnych potrzeb.

+0

tak krótko [x] [y, z] jest lepiej niż [x, y, z]. a najlepszy jest krótki [x] [y] [z] czy to, co rozumiem, jest słuszne? –

+1

@Sara, to dalekie od tego proste. To, która forma jest lepsza, zależy od tego, co dokładnie robisz. – svick

+0

Tak. Jest to brytownica do korzystania z pamięci, ponieważ nie jest to JEDEN DUŻY BLOK (każda tablica jest jedna), ale optymalny rozmiar zależy od Twoich konkretnych potrzeb. To skomplikowane. Używam na przykład buforów o wielkości do 4mb, które są poddawane recyklingowi (jest nieużywana kolejka). – TomTom

1

Odbiór śmieci przyniesie korzyści w postaci jak najmniejszej ilości przedmiotów do zebrania. Tablica wielowymiarowa będzie traktowana jako pojedyncza alokacja:

short[,,] a = new short[2,3,4]; 

Szorstka tablica będzie korzystać z wielu różnych przydziałów. Jego mniejsze rozmiary alokacji może być znacznie szybciej przeznaczyć, ale może umieścić więcej szczep na GC podczas kolekcji:

short[][][] a = new short[2][][]; 

Nigdy nie słyszałem o „kafli pamięci” przed więc jeśli można wyjaśnić, co to znaczy, Mogę lepiej odpowiedzieć na twoje pytanie.

+0

Wiele aplikacji komputerowych wymaga manipulowania dużymi tablicami danych. Aplikacje te mogą zachowywać się źle w systemie stronicowanej pamięci wirtualnej (VM), ze względu na słabe wzorce dostępu do pamięci.Jednym z rozwiązań tego problemu jest układanie płytek, technika, w której macierze są podzielone na pod-macierze, które mapują jeden do jednego ze stronami VM. ==> skopiowane z tego pliku pdf: http: //www.usenix.org/publications/library/proceedings/sa92/franklin.pdf –

Powiązane problemy