第三次输入后的平均值错误

时间:2010-10-24 18:46:02

标签: c#

Hey Guys,我正在编写一个性能监视器程序,用于跟踪不同的事物,其中一个是可用内存。我已经能够使用相同的代码来找出其他性能计数器的最小值,最大值和平均值,但是这个仍然给我错误的平均值。

第一个平均值是正确的,然后我的数字真的很低。所以说前两次我得到1500MB和1400MB免费平均值将是1450MB,然后第三次是1600MB,那么我的平均输出将是700-800MB。

如果你能指出我正确的方向,那将不胜感激!谢谢:))

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

这是一个输出示例:

Sunday,24/10/2010 02:49:10 PM

输入最后平均最小值

内存1319MB 1319MB 1319MB 1319MB

Sunday,24/10/2010 02:49:40 PM

输入最后平均最小值

内存1326MB 442MB 0MB 1326MB

1 个答案:

答案 0 :(得分:1)

我的猜测是你在uint中存储了总字节数,而且它正在溢出...或类似的东西,无论如何。没有更多代码就很难分辨。当你加起来的数字突然变小时,溢出是一个明显的候选者。

如果您可以编写一个简短但完整的程序来演示问题,那么可以更容易地说出问题的真正原因。

我不清楚你为什么要打电话给Convert.ToInt16 - 你为什么要这样限制你的信息呢?