web-dev-qa-db-fra.com

Comment mesurer la consommation totale de mémoire du processus en cours par programme dans .NET?

Comment mesurer la consommation totale de mémoire du processus en cours par programme dans .NET?

54
Jader Dias

Reportez-vous à cette question SO

Essayez encore ceci

Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
52
HotTester

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.

32
Adam Ralph
3
Kris Krause

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;
2
Jader Dias