使用C#随时随地更新平均传输速率的算法

时间:2013-05-23 19:26:50

标签: c# data-transfer

我有一个将数据写入数据库的冗长方法。它被反复调用。我还维护到目前为止所写的记录的计数器,以及需要写入的记录总数:

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. 我如何准确计算1秒钟的计算时间?

  2. 而且,最重要的是,我如何计算平均转移率?

  3. PS。我需要这样做,在旅途中,可以这么说,这个方法正在运行(而不是在它完成之后。)

1 个答案:

答案 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;
    }
 }