如何使用c#中的样本计算速度

时间:2014-12-23 16:09:30

标签: c# performance statistics

我每隔x秒抓取一个当前时间和速度的样本

(time / number of objects created) = avg speed

我想写一个了解如何使用样本来计算更好的平均速度的类。

起初我认为速度为double [],然后使用Linq平均,但因为定时器和线程不确定,我可能会在

处取样
  • 4秒
  • 4.2秒
  • 5.1秒
  • 5秒
  • 5秒
  • 4.101秒

等。

我认为TimeSpan是标记,但它只显示了行之间的增量。 所以我想的可能是Tuple或KeyValue,但使用TimeSpan计算平均速度并不是那么简单

有没有人有想法?

感谢

3 个答案:

答案 0 :(得分:1)

使用计时器/秒表的组合来控制实时:

StopWatch watch;
Timer tmr;

List<double> samples;

void initSampling()
{

    samples = new List<double>();
    watch = new Stopwatch();
    tmr = new Timer();
    tmr.Tick += tmr_Tick;
    tmr.Interval = 1000;
    tmr.Start();
    watch.Start();
}

void tmr_Tick(object sender, EventArgs e)
{

    double items = ...;//store the number of items created
    watch.Stop();

    double itemsPerSec = items / watch.ElapsedMilliseconds;

    double timePerItem = 1.0 / itemsPerSec;

    samples.Add(timePerItem);

    watch.Restart();
}

答案 1 :(得分:0)

在每个&#39; tick&#39;存储当前时间。 根据自上次打勾以来的项目数和最后一次打勾的时间戳,您可以计算最新间隔的每秒项目数。将此值与间隔长度(例如以毫秒为单位)存储在列表中。

您的整体平均值(确切地)是此列表的加权平均值。 (权重是毫秒)

答案 2 :(得分:0)

您是否考虑过使用PerformanceCounter http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter(v=vs.110).aspx?您只需计算创建的对象数量,性能计数器就会自动计算平均速度&#34; (我认为你的意思是创建对象的速率,或者每秒的对象数。)