0

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

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. 而且,最重要的是,我如何计算平均传输率?

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

4

1 回答 1

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;
    }
 }
于 2013-05-23T19:36:55.123 回答