Времето на хронометъра винаги е нула

В моя код внедрих изчисление, при което компютърът събира всички числа между 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