我有一个将数据写入数据库的冗长方法。它被反复调用。我还维护到目前为止所写的记录的计数器,以及需要写入的记录总数:
private int currentCount;
private int totalCount;
private double fAverageTransferRate;
bool processingMethod()
{
//Processes one record at a time
DateTime dtNow = DateTime.Now; //Time now
fAverageTransferRate = //?
}
我知道要计算一个传输速率,我需要记录一秒内写的记录数,对,但这里有两个问题:
我如何准确计算1秒钟的计算时间?
而且,最重要的是,我如何计算平均转移率?
PS。我需要这样做,在旅途中,可以这么说,这个方法正在运行(而不是在它完成之后。)
答案 0 :(得分:2)
你可以用不同的方式来思考,因为你真正感兴趣的是处理记录的速度。因此,您不需要以1秒的间隔进行计算。相反,你需要它发生在每一秒,但随后确切知道它何时发生。
要计算平均传输速率,只需保留要传输的记录数的运行计数。如果自上次计算平均值以来已超过1秒,则重新计算平均值的时间。完成后将运行计数归零,为下一轮做准备。
伪代码如下:
// somewhere outside:
int lastdonetime = 0;
int numprocessed = 0;
bool processingMethod()
{
DateTime dtNow = DateTime.Now; //Time now
if (lastdonetime == 0) lastdonetime = dtNow;
if (dtNow - lastdonetime > 1) {
fAverageTransferRate = numprocessed / (dtNow - lastdonetime);
// Do what you want with fAverageTransferRate
lastdonetime = dtNow;
numprocessed = 0;
}
}