【问题标题】:Algorithm to update average transfer rate on-the-go with C#使用 C# 随时更新平均传输率的算法
【发布时间】:2013-05-23 19:26:50
【问题描述】:

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

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。我需要在旅途中完成此操作,可以说,在此方法运行时(而不是在完成后)。

【问题讨论】:

    标签: c# data-transfer


    【解决方案1】:

    您可以换一种方式考虑,因为您真正感兴趣的是处理记录的速度。因此,您不需要以精确的 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;
        }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2017-11-02
      • 2021-10-15
      相关资源
      最近更新 更多