C# 平均事件时间计算不正确

C# 平均事件时间计算不正确,c#,math,C#,Math,我有一个程序,其中一个事件随机发生。我试图编写一些代码来计算和存储这些事件发生所需的平均时间。以下是我用来计算平均值的代码: int EventCount = 0; var s = Stopwatch.StartNew(); while(true) { if (EventTriggered) { Console.WriteLine("Event detected"); EventCount++; s.Stop();

我有一个程序,其中一个事件随机发生。我试图编写一些代码来计算和存储这些事件发生所需的平均时间。以下是我用来计算平均值的代码:

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个事件的示例:

您将平均值除以事件计数,这意味着您将一次又一次地除以。您需要累计总数,然后每次重新计算平均值

更像这样:

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();
    }
}

请注意,您应该在写入线之前停止计时器,否则也会对控制台操作计时。

您的计算是错误的。您应该单独保存计数和总运行时间,并在需要时进行除法。如果经过的时间是1、3、5,那么看看你在做什么。显然,平均值应该是1、2和3。您将得到(EventCount=1;AverageMS=1)。然后你会得到EventCount=2,AverageMS加上3,然后除以2,所以Average是(1+3)/2=2。然后EVentCount变为3,平均MS=(2+5)/3=2.333(现在出错,应该是3)。如果下一个是3,则平均值为(2.333+3)/4=1.3333


只需将计数和运行总数分开即可解决问题。

这可能是因为您计算平均值的公式完全错误。除此之外,像这样的
while(true)
循环是一种相当糟糕的方式-您的CPU一定会出问题。而且,
EventTriggered
是如何重置的?您可以发布其余的代码吗?如果我们看到了您试图获取平均时间的代码,我们将能够更好地提供帮助。