C #: utilisation de la mémoire d’un object

Existe-t-il un moyen de déterminer la quantité de mémoire utilisée pour un object particulier? Par exemple une liste. Tout prendre en compte, comme l’internalisation des chaînes et tout ce qui est fait par le compilateur / environnement d’exécution / peu importe.

Vous devez vraiment définir exactement ce que vous entendez par “combien de mémoire est utilisée pour un object particulier”. Par exemple, vous pourriez dire “si cet object était récupéré, combien serait libéré”, ou “combien de mémoire cet object et tout ce qu’il touche prend-il en mémoire”.

Votre remarque sur l’interning est un bon exemple. Supposons que vous fassiez:

List internedSsortingngs = new List(); List nonInternedSsortingngs = new List(); for (int i=0; i < 1000; i++) { string tmp = new string(' ', i+1); nonInternedStrings.Add(tmp); tmp = tmp.Intern(); internedStrings.Add(tmp); } 

nonInternedSsortingngs t- nonInternedSsortingngs vraiment plus de mémoire que internedSsortingngs ? Si internedSsortingngs avait été collecté, cela ne libérerait pas autant de mémoire - mais si internedSsortingngs n'avait jamais été créé (y compris ne pas interner chacun de ses éléments), il n'aurait jamais été nécessaire de disposer de plus de mémoire.

Si vous pouvez être plus précis sur ce que vous voulez dire, nous pourrons peut-être vous aider. C'est une question complexe cependant.

ANTS Memory Profiler établit un profil de la consommation de mémoire du code .NET. J’ai eu d’excellents résultats avec elle dans le passé.