2015-09-05 18 views
9

Jestem całkiem nowym problemem z pamięcią. Mam nadzieję, że nie uważasz, że to głupie pytanie.C# Duży obiekt w średniej wielkości kolekcji

wiem, że pamięć większa niż 85.000 Bytes byłyby wprowadzane do LOH w C# tj

Byte[] hugeByteCollection = new Byte[85000]; 

Zastanawiam się, czy zbiór o rozmiarze 10000 - 20000 z obiektu, który zawiera 10 zmiennych składowych (bajt typ) zostanie umieszczony w LOH lub SOH?

Odpowiedz

4

Rozmiar tablicy obiektów to liczba obiektów pomnożona przez rozmiar wskaźnika. Dzieje się tak dlatego, że tylko typy wartości są przechowywane w samej tablicy, typy odniesienia (obiekty) będą przechowywane gdzie indziej i nie będą wliczane do rozmiaru tablicy. Tak więc 85000/4 = 21250 obiektów i 85000/8 = 10625 obiektów może być przechowywanych w tablicy na SOH odpowiednio w trybie 32-bitowym i 64-bitowym.

Edytuj: Podziękowania dla Hansa Passanta za wskazanie, że zakłada to, że użytym typem kolekcji jest tablica, a nie lista. Listy zmieniają rozmiar, aby były większe niż zawartość, aby uniknąć zbyt wielu przydziałów. Aby uzyskać szczegółowe informacje, zobacz: this link

+1

Ten rodzaj matematyki nie działa dla typów kolekcji, w rzeczywistości jest to 16 384. Sprawdź [tę odpowiedź] (http://stackoverflow.com/a/2248188/17034), aby uzyskać szczegółowe informacje. –

+0

Dzięki za komentarz! Rozmiar, o którym mówisz, dotyczy tylko list, a nie tablic, więc nie jest bezpośrednio związany z tym pytaniem. Ale nadal powinienem dodać ostrzeżenie –

+0

, aby zachować listę w SOH dla listy zawierającej dużą liczbę obiektów Musimy wymyślić listę podzieloną na partycje, która zawiera tablicę listy. Lista partycji będzie dynamicznie tworzyć nową listę i dodawać do arry, gdy lista przekroczy pojemność 10000 Czy to zadziała? – cscmh99

Powiązane problemy