Монитор производительности - операции ввода-вывода данных в секунду - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь получить значение из монитора производительности Операции ввода-вывода данных / сек из определенного процесса и преобразовать его в читаемое значение.

private static IEnumerable<String> GetProcessStatistics(String[] processList)
{
    Process[] process_List = Process.GetProcesses();

    foreach (string process in processList)
    {
        foreach (Process p in process_List)
        {
            if (process == p.ProcessName)
            {
                StringBuilder sb = new StringBuilder();

                PerformanceCounter NETWORKperformanceCounter = new PerformanceCounter("Process", "IO Data Operations/sec", p.ProcessName);

                NETWORKperformanceCounter.NextValue();
                System.Threading.Thread.Sleep(1000);

                double processNetworkdata = NETWORKperformanceCounter.RawValue;

                sb.AppendLine("ID: " + p.Id.ToString());
                sb.AppendLine("NAME: " + p.ProcessName);
                sb.AppendLine(String.Format("NETWORK USAGE: {0}", processNetworkdata));
                sb.AppendLine(String.Format("NETWORK USAGE: {0}", ConvertToReadableBandwidthSize(processNetworkdata)));

                yield return sb.ToString();
            }
        }
    }
}

Первое возвращаемое значение равно 4995043
Второе возвращаемое значение равно 4.76mbps
Значение, отображаемое в диспетчере задач, равно 48.5mbps

Я понимаю, что значения никогда не будут perfect Я думалЯ думал, что они будут очень близки, так как он использует RawValue

Вот как конвертировать RawValue

private static String ConvertToReadableBandwidthSize(Object size)
{
    string[] ordinals = new string[] { "","K","M", "G", "T", "P", "E" };
    long bandwidth = Convert.ToInt64(size);
    decimal rate = (decimal)bandwidth;
    int ordinal = 0;

    while (rate > 1024)
    {
        rate /= 1024;
        ordinal++;
    }

    return String.Format("{0} {1}bps", Math.Round(rate,2, MidpointRounding.AwayFromZero), ordinals[ordinal]);
 }

Обновление, которое я нашел с большимчисла, все, что должно быть в диапазоне mbps, например, 1.2mpbs, я думаю, что это неправильно, однако с меньшими числами или чем-то в диапазоне Мбит / с это, кажется, будет в порядке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...