2010-10-24 5 views
0

Привет, ребята, я пишу программу мониторинга производительности, которая отслеживает разные вещи, одна из которых является доступной памятью. Я смог использовать этот же код, чтобы узнать min, max и average для других счетчиков производительности, но этот продолжает давать мне неправильный Average.Неверный средний после третьего ввода

Первое среднее значение верно, то я получаю действительно низкие числа. Итак, скажем, первые два раза я получил 1500 МБ и 1400 МБ бесплатно. Среднее будет 1450 МБ, а в третий раз - 1600 МБ, тогда мой вывод для Среднего будет чем-то в 700-800 МБ.

Если вы можете указать мне в правильном направлении, это было бы оценено! Спасибо :)

 //Move to and get the latest value in the performance counter for Memory Available Bytes 
     m.CurrentMemoryAvailableBytes = perfMemoryBytes.NextValue(); 

     //Increase the count that will be used to divide the sum to get average 
     iCount++; 

     m.TotalMemoryAvailableBytes += m.CurrentMemoryAvailableBytes; 

     //Check if the current value is greater then the max for memory available bytes 
     if (m.CurrentMemoryAvailableBytes > m.MaxMemoryAvailableBytes) 
      m.MaxMemoryAvailableBytes = m.CurrentMemoryAvailableBytes; 

     //Initialize Min so its not stuck at 0 
     if (iCount == 1) 
     { 
      m.MinMemoryAvailableBytes = m.CurrentMemoryAvailableBytes; 
     } 
     else 
     { 
      //Check if the current value is less then the min for memory available bytes 
      if (m.CurrentMemoryAvailableBytes < m.MinMemoryAvailableBytes) 
       m.MinMemoryAvailableBytes = m.CurrentMemoryAvailableBytes; 
     } 
     addListView("Memory Available Bytes", Convert.ToInt16(m.CurrentMemoryAvailableBytes/1048576), 
      Convert.ToInt16((m.TotalMemoryAvailableBytes/iCount)/1048576), Convert.ToInt16(m.MinMemoryAvailableBytes/1048576), 
      Convert.ToInt16(m.MaxMemoryAvailableBytes/1048576)); 

Вот выход пример:

Воскресенье, 24/10/2010 2:49:10 PM

Тип Последний Среднее Min Max

памяти 1319MB 1319MB 1319MB 1319MB

воскресенье, 24/10/2010 2:49:40 PM

Тип Последняя Средняя Min Max

памяти 1326MB 442MB 0MB 1326MB

+0

Почему в среднем 1400 и 1500 составляет 14500, а не 1450? –

+0

добавлен дополнительно 0 по ошибке –

+1

В вашем выводе отображается Min to 0 ..., который предполагает, что вы собираете хотя бы * одно * значение 0, поэтому неудивительно, что среднее значение упало. Опять же, если бы вы могли предоставить короткую, но полную программу, это помогло бы ... Вы также можете посмотреть методы Math.Max ​​и Math.Min, чтобы избежать ваших операторов if. –

ответ

1

Я предполагаю, что вы храните общее количество байтов в uint, и он переполнен ... или что-то подобное, в любом случае. Трудно сказать без кода. Переполнение является очевидным кандидатом, когда числа, которые вы складываете, внезапно становятся маленькими.

Если бы вы могли написать краткую, но полную программу, которая продемонстрировала бы проблему, это значительно облегчило бы понять, что проблема на самом деле.

Непонятно, почему вы звоните Convert.ToInt16, хотя - почему вы хотите ограничить свою информацию?

+0

Я получил это благодаря. Ответ был не в этом посте, а в одном из комментариев исходного ответа. Оператор if, который я использовал, был некорректным, и при удалении он выводил бы правильное среднее значение. Посмотрите на другие способы инициализации min до правильного значения. Еще раз спасибо! –

Смежные вопросы