Время секундомера всегда равно нулю

Я реализовал вычисление в своем коде, в котором компьютер складывает все числа от 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;

}

ОБНОВИТЬ**

Спасибо за быстрые ответы, теперь я вижу, где я ошибся! К сожалению, с такой низкой репутацией я не могу голосовать за ваши ответы :( но все равно спасибо! Виноваты ранние утра!


person CH99    schedule 14.10.2014    source источник
comment
Подумайте о том, когда вы запускаете секундомер в связи с расчетом...   -  person Hans Kesting    schedule 14.10.2014
comment
Вы вызываете AddAllNumbersMax(), который останавливает секундомер, ТОГДА вы запускаете секундомер.   -  person Ben Robinson    schedule 14.10.2014


Ответы (4)


Вы останавливаете секундомер до того, как запустите его

пытаться:

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;

}
person user1    schedule 14.10.2014
comment
Спасибо за быстрый ответ! Имеет смысл :) - person CH99; 14.10.2014

Если я вас правильно понял, вы хотите измерить время выполнения 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
}    
person Lennart    schedule 14.10.2014

AddAllNumbersMax();
stopWatch.Start();

Это сначала выполнит AddAllNumbersMax, который по очереди вызывает stopWatch.Stop() и считывает прошедшее время, и только затем запустит время.

Если вы собираетесь измерять время, которое занимает AddAllNumbersMax, вероятно, неплохо было бы запустить секундомер и там же. Или переместите весь секундомер из метода и поместите его вокруг вызова.

person poke    schedule 14.10.2014

Это очевидно, потому что программа сначала выполнит ваш AddAllNumbersMax(), и когда эта операция закончится, приложение запустит таймер. вы должны сделать это следующим образом:

stopWatch.Start();
AddAllNumbersMax();
stopWatch.Stop();
person MajkeloDev    schedule 14.10.2014