2010-10-24 3 views
0

Salut les gars, j'écris un programme de moniteur de performance qui garde la trace de différentes choses, l'un d'eux étant la mémoire disponible. J'ai pu utiliser ce même code pour trouver le minimum, le maximum et la moyenne pour les autres compteurs de performance, mais celui-ci continue à me donner la mauvaise moyenne.Mauvaise moyenne après la troisième entrée

La première moyenne est correcte, alors j'obtiens des nombres vraiment bas. Alors disons les deux premières fois que j'ai obtenu 1500MB et 1400MB gratuit moyen serait 1450MB, puis la troisième fois est 1600MB, alors ma sortie pour la moyenne serait quelque chose dans le 700-800MB.

Si vous le pouvez s'il vous plaît pointez-moi dans la bonne direction, ce serait apprécié! Merci :)

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

Voici un exemple de sortie:

dimanche, 24/10/2010 14:49:10

Type de Dernière moyenne Min Max

mémoire 1319MB 1319MB 1319MB 1319MB

dimanche, 24/10/2010 14:49:40

dernier type Moyenne Min Max

mémoire 1326MB 442MB 0MB 1326MB

+0

Pourquoi la moyenne de 1400 et 1500 serait 14500 plutôt que 1450? –

+0

ajouté un 0 supplémentaire par erreur –

+1

Votre sortie montre le Min allant à 0 ... ce qui suggère que vous avez recueilli au moins * une * valeur de 0, il n'est donc pas surprenant que la moyenne a chuté. Encore une fois, si vous pouviez fournir un programme court mais complet, cela vous aiderait ... Vous pouvez aussi regarder les méthodes Math.Max ​​et Math.Min pour éviter vos instructions if. –

Répondre

1

Je pense que vous stockez le nombre total d'octets dans un uint, et ça déborde ... ou quelque chose comme ça, de toute façon. C'est assez difficile à dire sans plus de code. Le débordement est un candidat évident lorsque les nombres que vous additionnez deviennent soudainement petits.

Si vous pouviez écrire un programme court mais complet qui démontre le problème, cela rendrait beaucoup plus facile de dire quel est vraiment le problème.

Je ne comprends pas pourquoi vous appelez le Convert.ToInt16 - pourquoi voudriez-vous limiter vos informations comme ça?

+0

Je l'ai eu merci. La réponse n'était pas dans ce post, mais l'un des commentaires de la réponse originale. L'instruction if que j'utilisais était incorrecte, lorsqu'elle est supprimée, elle affiche la moyenne correcte. Se penchera sur d'autres façons d'initialiser le min à la valeur correcte. Merci encore! –

Questions connexes