OK, cette question a été répondue et la réponse a été acceptée mais quelqu'un m'a demandé de mettre ma réponse alors voilà.
Tout d'abord, il n'est pas possible de l'affirmer avec certitude. Il s'agit d'un détail d'implémentation interne et non documenté. Cependant, en se basant sur les objets inclus dans l'autre objet. Maintenant, comment calculer le besoin en mémoire pour nos objets en cache ?
J'avais déjà abordé ce sujet dans ce article :
Maintenant, comment calculer le besoin en mémoire pour notre cache en cache ? Eh bien, comme la plupart d'entre vous le savent, Int32 et float sont des objets de quatre octets, double et DateTime 8 octets, char est en réalité deux octets (et non pas un octet), et ainsi de suite. String est un peu plus complexe, 2*(n+1), où n est la longueur de la chaîne. Pour les objets, cela dépendra de leurs membres : il suffit d'additionner les besoins en mémoire de tous ses membres, en se rappelant que toutes les références d'objets sont simplement des pointeurs de 4 octets sur une boîte 32 bit. Maintenant, ce n'est pas tout à fait vrai, nous n'avons pas pris en compte de l'overhead de chaque objet dans le tas. Je ne suis pas sûr que vous ayez besoin si vous devez vous en préoccuper, mais je suppose que si vous utilisez beaucoup de petits objets, vous devriez prendre l'overhead en considération. considération. Chaque objet du tas coûte autant que ses types primitifs, plus quatre octets pour les références aux objets (sur une machine 32 bits, bien que BizTalk fonctionne en 32 bits sur des machines 64 bits également), plus 4 octets pour le pointeur d'objet de type, et je pense 4 octets pour l'index de bloc de synchronisation. Pourquoi cette surcharge supplémentaire est-elle importante ? Eh bien, imaginons que nous ayons une classe avec deux membres Int32 ; dans ce cas, le besoin en mémoire est le suivant 16 octets et non 8.
3 votes
Et stackoverflow.com/questions/207592/
1 votes
Tout conteneur est un objet relativement petit qui contient une référence à un stockage de données (généralement un tableau) en dehors de l'objet conteneur proprement dit - et qui contient à son tour des références aux objets que vous avez ajoutés au conteneur. Ainsi, la question de savoir combien de mémoire prend une liste n'est même pas bien définie - la taille de l'objet liste lui-même, la mémoire allouée par l'objet liste, la taille totale de tout ce qui est dans la liste et la quantité de mémoire qui sera libérée lorsque la liste sera collectée sont toutes des valeurs différentes.
0 votes
Et stackoverflow.com/questions/555929/c-memory-usage-of-an-object/
0 votes
Voir les benchmarks dans l'application de test que j'ai créée : github.com/scholtz/TestDotNetCollectionsMemoryAllocation
1 votes
Si vous utilisez Visual Studio, vous pouvez utiliser le nouvel outil d'allocation d'objets .NET : devblogs.microsoft.com/visualstudio/