2015-10-23 4 views
1

Я хочу, чтобы проверить свою скорость выполнения кода, мой код:как проверить скорость выполнения кода в android?

public static String foo() { 

     final long startTime = System.currentTimeMillis(); 
     try { 
      // my code here 
      long final endtime = System.currentTimeMillis(); 
      System.out.println ("Total execution time:" + (endtime - startTime)); 
      return msg; 
     } Catch (GeneralSecurityException e) { 
      return "ERROR"; 
     } 
    } 

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

+0

Как долго длится ваш код? Если он завершится быстро (менее секунды), вы захотите запустить его несколько раз и разделить на количество прогонов. Кроме того, предпочитайте 'System.nanoTime()' над 'System.currentTimeMillis()', поскольку первый использует монотонные часы. – fadden

+0

@fadden да, он работает менее 1 секунды, поэтому нет способа получить реальное время выполнения кода без влияния процесса загрузки системы? также, спасибо за предложение нанотима :) –

+0

Возможно, он не имеет ничего общего с фоновыми процессами. Мобильные устройства работают на низкой мощности при работе на холостом ходу и не храните часы до тех пор, пока нагрузка не будет на определенное время. Если ваш код работает полностью в период нарастания, он не завершится так быстро, как если бы процессор работал на полной скорости. С другой стороны, часы могут замедляться из-за теплового дросселирования. И если вы работаете в AsyncTask, сам поток работает с меньшим приоритетом. Бенчмаркинг трудный. :-) Найдите способ выполнить тот же код 100x, а затем разделите время на 100. – fadden

ответ

1

Как вы сказали, вам нужно запустить это несколько попыток и взять среднее. Это было бы самым точным способом. Это значение может различаться для разных устройств и сильно отличаться на одном устройстве в зависимости от приложений, работающих в фоновом режиме.

Android рекомендует использовать класс TimingLogger. http://developer.android.com/reference/android/util/TimingLogger.html

Смежные вопросы