2016-02-27 1 views
0

У меня есть этот метод:Java/Android: Я не понимаю, почему это происходит медленнее, чем ожидалось

@DebugLog 
private synchronized int insertInOrderedFromBottom(ItemWithTime itemWithTime, ArrayList<ItemWithTime> array) { 
    long start = System.currentTimeMillis(); 
    if (itemWithTime == null || itemWithTime.getDateTime() == null) return -1; 
    if (array == null) return -1; 
    int arraySize = array.size(); 
    for (int i = arraySize - 1; i >= 0; i--) { 
     if (itemWithTime.getDateTime().isBefore(array.get(i).getDateTime())) { 
      i++; 
      array.add(i, itemWithTime); 
      long end = System.currentTimeMillis(); 
      Log.d(TAG,"insertInOrderedFromBottom inside took "+(end-start)); 
      return i; 
     } 
    } 
    array.add(itemWithTime); 
    long end = System.currentTimeMillis(); 
    Log.d(TAG,"insertInOrderedFromBottom inside took "+(end-start)); 
    return array.size(); 
} 

Теперь вы видите заявление журнала, которые я использую, чтобы измерить время, затрачиваемое этот метод для завершения:

  • журналы говорят, что метод для завершения занимает около 0 мельниц.

я называю метод, как это:

start = System.currentTimeMillis(); 
insertInOrderedFromBottom(datum, items); 
end = System.currentTimeMillis(); 
Log.d(TAG, "insertInOrderedFromBottom invoication took " + (end - start) + " ms"); 
  • Здесь журнал говорит, что это занимает 10-15 мельниц.

Что происходит? Что мне здесь не хватает?

EDIT

Я попытался без не синхронизируется и никакой разницы.

+0

Я не понимаю, о чем вы просите. Сначала вы пишете: «Говорят, что метод для завершения занимает около 0 мельниц» (Кто это говорит?). Позже ваш собственный журнал показывает, что он занимает от 10 до 15 миллисекунд. Какова ваша проблема сейчас? –

+0

Журналы говорят, что: 'Log.d (TAG," insertInOrderedFromBottom, loop принят "+ (end-start) +" ms ");' –

+0

Пожалуйста, прочитайте мои вопросы и ответьте на них. Как насчет первого предложения около 0 миллисов? Кто так говорит ? И что конкретно представляет собой ваша проблема? –

ответ

3

Функция регистрации андроида довольно медленная. Поэтому, если у вас есть журнал внутри внутреннего цикла, который печатает разницу во времени, то это само по себе займет несколько миллисекунд. Таким образом, последняя временная синхронизация отражает время, необходимое для выполнения Log.d во внутреннем контуре

+0

Спасибо, Вернер, действительно, сами журналы сами замедляли работу –

+0

То же самое с инструкциями System.out.println. Часто удивительно, сколько времени тратится на ввод-вывод. –

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