Как всегда, лучшее, что нужно сделать, это измерить это самостоятельно.Вы можете использовать этот код с вызовами на System.nanotime()
, чтобы получить очень детальную продолжительность.Получите время начала, а затем вычислите, сколько времени на самом деле занимают различные большие куски вашего метода.Возьмите кусок, который является самым медленным, и добавьте в него больше nanotime(
) вызовов.Дайте нам знать, что вы также найдете, что будет полезно для других людей, читающих ваш вопрос.
Итак, вот мое предположение о штанах ...
Оптимизация операторов if будет иметь почтиникакого измеримого эффекта: все эти сравнения довольно быстрые.
Итак, давайте предположим, что проблема здесь:
if (waypoints.size() > 0)
{
EcState state = defaultDestination();
for (EcState s : waypoints)
{
state.union(s);
}
state.union(this);
return state.isSatisfied(candidate);
}
Я предполагаю, что путевые точки - это список, и вы не переопределили метод size ().В этом случае List.size () просто обращается к переменной экземпляра.Так что не беспокойтесь об операторе if.
Оператор for выполняет итерацию по элементам вашего List довольно быстро, так что для себя это не так, хотя проблема может заключаться в коде, который он выполняет.Задания и возвраты не требуют времени.
Это оставляет следующие потенциальные горячие точки:
- Один вызов
defaultDestination()
. - Все вызовы
EcState.union()
. - Единственный вызов
EcState.isSatisfied()
.
Я бы хотел поспорить, что ваша точка доступа находится в union (), тем более что она собирает все большую и большую коллекцию путевых точек.
Сначала измерьте с помощью nanotime ().