【问题标题】:Stopwatch time always zero秒表时间始终为零
【发布时间】:2014-10-14 10:40:15
【问题描述】:

我在我的代码中实现了一个计算,其中电脑将 0 到 999999999 之间的所有数字相加并输出答案。从按下按钮到屏幕上显示答案,此过程需要几秒钟。现在我想要一个秒表或计时器,当我按下按钮时,它会在屏幕上出现答案时开始和停止,并告诉我花了多长时间。以下是我实现的,但是我被“00:00:00”击中。我是否错误地假设它只是在按下按钮时开始,在 for 循环停止和显示时间之后?

if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999"))
        {
            AddAllNumbersMax();
            stopWatch.Start();
        }

    }
    GUI.TextArea(new Rect(275, 100, 300, 300), _messageLog);
}

void AddAllNumbersMax()
{
    int max = 999999999;
    double result = 0;
    for (int i = 0; i<=max; i++) 
    {
        result += i;

    }
    _messageLog += result + "\n";
    stopWatch.Stop ();
    _messageLog += stopWatch.Elapsed;

}

更新**

感谢您的快速回复,我现在知道哪里出错了!不幸的是,由于代表人数如此之低,我无法为您的答案投票:(但无论如何,谢谢!要怪早起!

【问题讨论】:

  • 想想何时你启动秒表与计算有关...
  • 你调用 AddAllNumbersMax() 来停止秒表,然后你启动秒表。

标签: c# stopwatch


【解决方案1】:

如果我理解正确,您想测量 AddAllNumbersMax() 的运行时间,在这种情况下,您必须在方法调用之前启动 Stopwatch,然后再停止:

if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999"))
{
  stopWatch.Start();
  AddAllNumbersMax();
  stopWatch.Stop();
  // Do something with elapsed time
}    

【讨论】:

    【解决方案2】:

    在启动秒表之前您正在停止它

    尝试:

    if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999"))
            {
                stopWatch.Start();
                AddAllNumbersMax();
    
            }
    
        GUI.TextArea(new Rect(275, 100, 300, 300), _messageLog);
    }
    
    void AddAllNumbersMax()
    {
        int max = 999999999;
        double result = 0;
        for (int i = 0; i<=max; i++) 
        {
            result += i;
    
        }
        _messageLog += result + "\n";
        stopWatch.Stop ();
        _messageLog += stopWatch.Elapsed;
    
    }
    

    【讨论】:

    • 感谢您的快速回复!有道理:)
    【解决方案3】:
    AddAllNumbersMax();
    stopWatch.Start();
    

    这将首先执行AddAllNumbersMax——依次调用stopWatch.Stop()并读取经过的时间——只有然后它才会开始计时。

    如果您要测量AddAllNumbersMax 所用的时间,那么在其中启动秒表可能也是一个好主意。或者将整个秒表业务移出方法并将其放在调用周围。

    【讨论】:

      【解决方案4】:

      这很明显,因为程序首先会执行您的 AddAllNumbersMax(),当此操作结束时,他们的应用程序将启动计时器。 你应该这样做:

      stopWatch.Start();
      AddAllNumbersMax();
      stopWatch.Stop();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2016-05-02
        • 2012-01-16
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多