我有一个程序,其中一个事件随机发生。我正在尝试编写一些代码来计算和存储这些事件发生所需的平均时间。这是我用来计算平均值的代码:
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
Console.WriteLine("Event detected");
EventCount++;
s.Stop();
AverageMS+= s.ElapsedMilliseconds;
AverageMS /= EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
它显示的假设平均毫秒看起来更接近个别时间而不是平均值。
以下是100个事件的示例: http://pastebin.com/cmwQPqfR
答案 0 :(得分:0)
您将平均值除以事件计数,这意味着您要反复划分。您需要累计总数,然后每次重新计算平均值。
更像这样:
long TotalMS = 0;
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
s.Stop();
Console.WriteLine("Event detected");
EventCount++;
TotalMS+= s.ElapsedMilliseconds;
AverageMS = TotalMS / EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
请注意,您应该在WriteLine之前停止计时器,否则您也要为控制台操作计时。
答案 1 :(得分:0)
你的计算错了。您应该在需要时分别计算计数和总耗用时间。如果您的经过时间是1,3,5,请查看您正在做什么。显然,平均值应该是1,2和3.您将获得的是(EventCount = 1; AverageMS = 1)。然后你会得到EventCount = 2,AverageMS有3加上然后除以2所以平均值是(1 + 3)/ 2 = 2.然后EVentCount变为3和平均MS =(2 + 5)/ 3 = 2.333(现在出错,应该是3)。如果下一个是3那么平均值将是(2.333 + 3)/ 4 = 1.3333!。
只需将计数和运行总计分开来修复它。