Проблема измерения прошедшего времени - JAVA - PullRequest
0 голосов
/ 08 мая 2018

Я создаю простую игру на Android и хочу проверить продолжительность выполнения некоторых функций.

Для этого я написал класс (TimeLog), который сохраняет экземпляр System.nanotime() в поле Double при создании экземпляра.Класс, конечно, имеет метод end(), который вычитает время, которое он получил при создании экземпляра, к текущему System.nanotime().

. Проблема в том, что если я пытаюсь измерить продолжительность метода, который иногда содержит другие методыВнутренние методы занимают больше времени, чем метод, который их содержит.Я не понимаю, где я ошибаюсь.


Вот пример:

void myFunc(){
  TimeLog out = new TimeLog();
  inner1();
  inner2();
  out.end();
}

void inner1(){
  TimeLog in1 = new TimeLog();
  //something...
  in1.end();
}

void inner2(){
  TimeLog in2 = new TimeLog();
  //something...
  in2.end();
}


Main(){
  myFunc();
}

Иногда in1 или in2 возвращают более высокие значения, чем out.

Вот TimeLog:

public class Timelog
{

  private double startTime;
  private double duration;

  public TimeLog (){
    startTime = System.nanoTime();
  }

  public void end(){
    duration = (int)(System.nanoTime() - startTime);
  }

  public void log(){
    Log.d("TIMELOG", ":" + duration);
  }
}

1 Ответ

0 голосов
/ 08 мая 2018

Прежде всего, System.nanoTime() возвращает long, а не int или double, поэтому вы должны использовать long для правильного расчета. Я не уверен, если это решит вашу проблему, пожалуйста, опубликуйте пример выходных данных, если нет.

Редактировать: Не могли бы вы показать ту часть, где вы вызываете методы log()? Он нигде не вызывается в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...