我每隔x秒抓取一个当前时间和速度的样本
(time / number of objects created) = avg speed
我想写一个了解如何使用样本来计算更好的平均速度的类。
起初我认为速度为double [],然后使用Linq平均,但因为定时器和线程不确定,我可能会在
处取样等。
我认为TimeSpan是标记,但它只显示了行之间的增量。 所以我想的可能是Tuple或KeyValue,但使用TimeSpan计算平均速度并不是那么简单
有没有人有想法?
感谢
答案 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; (我认为你的意思是创建对象的速率,或者每秒的对象数。)