Общие ловушки производительности на Android? [закрытый]

Вы могли просто поместить элементы в набор в хеш, пока Вы не находите коллизию. В рубине это - острота.

def find_dupe(array)
  h={}
  array.detect { |e| h[e]||(h[e]=true; false) }
end

Так, find_dupe([1,2,3,4,5,1]) возвратился бы 1.

Это - на самом деле общий вопрос об интервью "приема" все же. Это обычно о списке последовательных целых чисел с одним дубликатом. В этом случае интервьюер часто ищет Вас для использования Гауссовой суммы n - целочисленный прием, например, n*(n+1)/2 вычтенный из фактической суммы. Ответ учебника - что-то вроде этого.

def find_dupe_for_consecutive_integers(array)
  n=array.size-1   # subtract one from array.size because of the dupe
  array.sum - n*(n+1)/2
end
5
задан Viktor 1 October 2009 в 17:51
поделиться

5 ответов

Советы по производительности, связанные с рендерингом, можно найти в следующих выступлениях Google I / O 2009:

1
ответ дан 15 December 2019 в 06:30
поделиться

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

0
ответ дан 15 December 2019 в 06:30
поделиться

Причина, по которой они хотят, чтобы вы избегали использования float, заключается в том, что это редко реализуется на процессорах телефона (Probbly arm) и должно быть реализовано в программном обеспечении, которое работает медленно. Хотя фиксированная точка обычно превосходит аппаратное обеспечение.

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

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

0
ответ дан 15 December 2019 в 06:30
поделиться

По мнению разработчиков Android, вам следует избегать использования имен интерфейсов для коллекций. Например, стандартная передовая практика для стандартной Java - это

List<String> strings = new ArrayList<String>();

, тогда как в Android говорят, что лучше объявить его с его типом времени выполнения

ArrayList<String> strings = new ArrayList<String>();
0
ответ дан 15 December 2019 в 06:30
поделиться

относительно плавающей точки:

на G1 добавление двух чисел с плавающей запятой занимает около 400 нс. добавление двух int занимает около 250 нс.

на нексусе один запущенный эклер (до JIT), обе операции занимают около 120 нс. (ints немного быстрее, но вы должны пройти микробенчмаркинг, чтобы это заметить.) Между int и long, float и double разница в процентах небольшая, но в основном, если вы можете себе позволить одно, вы, вероятно, можете позволить себе и другое.

другие современные устройства будут где-то между этими крайностями. (другие операции тоже будут отличаться. Умножение дороже, чем сложение / вычитание, а деление еще дороже. Ни в одном из современных устройств нет аппаратного целочисленного деления.)

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

большая часть текущей документации (эклер) неверна. сравнивайте вещи самостоятельно на устройствах, которые вам небезразличны.


но если бы вы действительно спрашивали, «чего следует остерегаться Java-программисту рабочего стола / сервера?», Я бы предложил: ненужное выделение памяти. у вас нет свободного ядра для сборки мусора, как на рабочем столе / сервере, и у вас нет гигабайт кучи, как на рабочем столе / сервере. если вы выполняете сборку мусора, вы не выполняете реальную работу, и ваша куча будет составлять не более 24 МБ на текущих устройствах. поэтому вы можете избежать ненужного выделения во внутренних циклах.

2
ответ дан 15 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: