Dire que j'ai classe suivante:Comprendre Large Object Heap et statistiques de sortie par dumpheap
Class A
{
B b;
C c;
D d;
}
D'abord, j'allouer:
var b1 = new B();
var c1 = new C();
var d1 = new D();
chacun b1, c1, d1
est inférieur à 85K, donc ils sont attribués sur le petit tas d'objets. Alors je:
var a1 = new A { b = b1, c = c1, d = d1 };
Question1: Quand je fais !DumpHeap -stat
ne l'utilisation de mem de A
comprennent la mémoire occupée par ses variables membres? Sinon, qu'est-ce que cela inclut réellement?
EDIT: trouvé la réponse à cette question dans cet article: http://blogs.msdn.com/b/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx. Il est logique que l'utilisation mem de A
n'inclut pas la mémoire occupée par b1, c1, d1
. Il inclut la mémoire nécessaire pour stocker les références b1, c1, d1
elles-mêmes.
Question2: Est-ce que a1
est allouée sur le tas d'objets volumineux (en supposant la taille de b1 + c1 + d1
> 85K)? Pourquoi? Les références b1, c1, d1
pointent vers des objets sur un petit tas d'objets. Alors pourquoi a1
s'asseoir sur le LOH?
Question3: Permet de le retourner. Say taille de b1
est plus de 85K, donc son alloué sur le LOH. Mais pour stocker des références à b1, c1, d1
nous avons seulement besoin de quelques octets. Ai-je raison de croire que a1
sera allouée sur le petit tas d'objets?