Je suis du développement d'une application qui ont actuellement des centaines d'objets créés.
Est-il possible de déterminer (ou approximative) de la mémoire allouée par un objet (instance de classe)?
Je suis du développement d'une application qui ont actuellement des centaines d'objets créés.
Est-il possible de déterminer (ou approximative) de la mémoire allouée par un objet (instance de classe)?
Vous pouvez utiliser un memory profiler comme
.NET Memory Profiler (http://memprofiler.com/)
ou
CLR Profiler (gratuit)http://clrprofiler.codeplex.com/)
Un grossier moyen pourrait-il être présent au cas où vous voulez savoir ce qui se passe avec un objet particulier
// Measure starting point memory use
GC_MemoryStart = System.GC.GetTotalMemory(true);
// Allocate a new byte array of 20000 elements (about 20000 bytes)
MyByteArray = new byte[20000];
// Obtain measurements after creating the new byte[]
GC_MemoryEnd = System.GC.GetTotalMemory(true);
// Ensure that the Array stays in memory and doesn't get optimized away
MyByteArray[1] = 20;
processus à l'échelle choses pourraient être obtenus peut-être comme ça
long Process_MemoryStart = 0;
Process MyProcess = System.Diagnostics.Process.GetCurrentProcess();
Process_MemoryStart = MyProcess.PrivateMemorySize64;
espérons que cette aide ;)
Les FOURMIS memory profiler vais vous dire exactement comment beaucoup est alloué pour chaque objet, de méthode, etc.
Voici un poste où nous avons discuté de la détermination de la taille des types référence.
Chaque "classe" nécessite assez de mémoire pour contenir tous c'est jit-le code compilé pour tous les membres qui ont été appelés par le moteur d'exécution, (bien que si vous ne t appeler une méthode pour assez un certain temps, le CLR peut libérer de la mémoire et de la re-jit à nouveau si vous l'appelez à nouveau... plus assez de mémoire pour contenir toutes les variables déclarées dans la classe... mais cette mémoire est allouée qu'une seule fois par catégorie, peu importe combien d'instances de la classe que vous créez.
Pour chaque instance de la classe que vous créez, (et n'a pas été nettoyée), vous pouvez vous rapprocher de l'empreinte mémoire en ajoutant l'utilisation de la mémoire par chaque instance de base de variable déclarée... (sur le terrain)
les variables de référence (les références à d'autres objets) prendre 4 ou 8 octets (32 bits / 64 bits de l'OS ?) int16, Int32, Int64 prendre 2,4 ou 8 octets, respectivement...
chaîne de caractères de la variable de stockage supplémentaire pour certaines méta éléments de données, (plus la taille du pointeur d'adresse)
En outre, chaque variable de référence à un objet peut aussi être considéré comme "indirectement" inclure la mémoire sur le tas par l'objet, il témoigne, bien que vous auriez probablement souhaitez compter que la mémoire comme appartenant à cet objet n'est pas la variable qui fait référence...
etc. etc.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.