Zgodnie z How to use .NET PerformanceCounter to track memory and CPU usage per process?PerformanceCounter
powinien podać liczbę pamięci wykorzystania danego procesu.Jak poprawnie używać licznika wydajności lub klasy procesów w języku C#, aby uzyskać wykorzystanie pamięci w bieżącym procesie?
Według instancji MSDN, Process
może również dać mi mniej więcej taką samą liczbę.
W celu zweryfikowania moich założeń, napisałem poniższy kod:
class Program
{
static Process process = Process.GetCurrentProcess();
static PerformanceCounter privateBytesCounter = new PerformanceCounter("Process", "Private Bytes", process.ProcessName);
static PerformanceCounter workingSetCounter = new PerformanceCounter("Process", "Working Set", process.ProcessName);
static void Main(string[] args)
{
GetMeasure();
Console.WriteLine("\nPress enter to allocate great amount of memory");
Console.ReadLine();
int[] arr = new int[10000000];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = i;
}
GetMeasure();
privateBytesCounter.Dispose();
workingSetCounter.Dispose();
Console.ReadKey();
}
private static void GetMeasure()
{
Console.WriteLine("{0,38} {1,20}", "Private bytes", "working set");
Console.WriteLine("process data{0,23} {1,20}", process.PrivateMemorySize64/1024, process.WorkingSet64/1024);
Console.WriteLine("PerformanceCounter data{0,12} {1,20}", privateBytesCounter.NextValue()/1024, workingSetCounter.NextValue()/1024);
}
}
Wyjście wygląda
Private bytes working set
process data 22880 17516
PerformanceCounter data 21608 15608
Press enter to allocate great amount of memory
Private bytes working set
process data 22880 17516
PerformanceCounter data 21608 15608
Dokładnie to samo! W przeciwieństwie do tego prywatne bajty wyświetlane w Process Explorer wzrosły z 32732 do 63620.
Czy robię coś złego?
Czy podane wartości są dokładnie takie same, czy nie? Czy możesz je opublikować? Chcę się przyjrzeć. – Gqqnbig
Zobacz zaktualizowaną odpowiedź. – ken2k
To dziwne, że teraz nawet bez metody odświeżania mój PerformanceCounter może podać prawidłową liczbę .... BTW, odświeżanie działa dobrze. Dzięki. – Gqqnbig