Как правильно использовать Performance Counter или класс Process в C# для получения данных об использовании памяти текущего процесса?

Согласно Как использовать .NET PerformanceCounter для отслеживания использования памяти и ЦП для каждого процесса? PerformanceCounter должен дать мне количество используемой памяти для данного процесса.

Согласно MSDN, Process экземпляр также может дать мне более или менее такое же число.

Чтобы проверить свои предположения, я написал следующий код:

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);
    }

}

Вывод выглядит так

                         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

Точно так же! Напротив, частные байты, показанные в Process Explorer, увеличились с 32732 до 63620.

Так может я делаю что-то не так?

8
задан Community 23 May 2017 в 12:17
поделиться