秒表时间始终为零

时间:2014-10-14 10:40:15

标签: c# stopwatch

我已经在我的代码中实现了一个计算,其中pc将0到999999999之间的所有数字加在一起并输出答案。按此按钮和屏幕上显示答案之间需要几秒钟的时间。现在我想要一个秒表或计时器,当我按下按钮时,只要答案出现在屏幕上并且告诉我需要多长时间,它就会开始和停止。以下是我实施的内容,但是我被" 00:00:00"击中。我是错误的假设它只是按下按钮开始和循环停止和显示时间之后?

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;

}

UPDATE **

感谢您的快速回复,我看到我现在出错的地方!不幸的是,如此低的代表,我无法提升你的答案:(但不管怎样,谢谢!清晨责备!

4 个答案:

答案 0 :(得分:3)

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

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
}    

答案 1 :(得分: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;

}

答案 2 :(得分:1)

AddAllNumbersMax();
stopWatch.Start();

这将首先执行AddAllNumbersMax - 它依次调用stopWatch.Stop()并读取已用时间 - 只有然后它将启动时间

如果您要测量AddAllNumbersMax所需的时间,那么在那里启动秒表也许是一个好主意。或者将整个秒表业务移出方法并将其置于通话之外。

答案 3 :(得分:1)

很明显,因为程序首先要执行你的AddAllNumbersMax(),当这个操作结束时,app会启动计时器。 你应该这样做:

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