Comment mesurer la consommation totale de mémoire du processus en cours par programme dans .NET?
Reportez-vous à cette question SO
Essayez encore ceci
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
Si vous souhaitez uniquement mesurer l'augmentation de, disons, l'utilisation de la mémoire virtuelle, causée par certaines opérations distinctes, vous pouvez utiliser le modèle suivant: -
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
// performs operations here
var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
Cela suppose, bien entendu, que votre application n'effectue pas d'opérations sur d'autres threads pendant l'exécution des opérations ci-dessus.
Vous pouvez remplacer VirtualMemorySize64
avec toute autre mesure qui vous intéresse. Jetez un œil à la System.Diagnostics.Process
tapez pour voir ce qui est disponible.
Classe PerformanceCounter -
http://msdn.Microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
Il y en a plusieurs -
http://msdn.Microsoft.com/en-us/library/w8f5kw2e.aspx
Voici le compteur de mémoire CLR -
J'ai trouvé cela très utile:
Thread.MemoryBarrier();
var initialMemory = System.GC.GetTotalMemory(true);
// body
var somethingThatConsumesMemory = Enumerable.Range(0, 100000)
.ToArray();
// end
Thread.MemoryBarrier();
var finalMemory = System.GC.GetTotalMemory(true);
var consumption = finalMemory - initialMemory;