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
答案 0 :(得分:1)
我的猜测是你在uint
中存储了总字节数,而且它正在溢出...或类似的东西,无论如何。没有更多代码就很难分辨。当你加起来的数字突然变小时,溢出是一个明显的候选者。
如果您可以编写一个简短但完整的程序来演示问题,那么可以更容易地说出问题的真正原因。
我不清楚你为什么要打电话给Convert.ToInt16
- 你为什么要这样限制你的信息呢?