Я повторю ответ Мхердада в том смысле, что определенно нет «базовых однострочных правил».
Что касается ответов, которые предполагают использование инструментов профилирования, то профилирование не очень полезно, пока вы не поймете сложность алгоритмического времени и нотацию big-O. Из статьи Википедии в записи Big O:
В математике, информатике и
связанные поля, нотация big-O
описывает ограничивающее поведение
функция, когда аргумент стремится
к определенной стоимости или
бесконечность, как правило, с точки зрения более простого
функции. Обозначение Big O
характеризует функции в соответствии с
их темпы роста: разные
функционирует с той же скоростью роста
может быть представлен с использованием того же O
нотации.
Идея нотации big-O состоит в том, что она дает вам представление о том, как размер ввода влияет на время выполнения для данного алгоритма. Например, рассмотрим следующие два метода:
void linearFoo(List<String> strings){
for(String s:strings){
doSomethingWithString(s);
}
}
void quadraticFoo(List<String> strings){
for(String s:strings){
for(String s1:strings){
doSomethingWithTwoStrings(s,s1);
}
}
}
linearFoo
называется O (n), что означает, что его время линейно возрастает с размером ввода n (т. Е. strings.size()
). quadraticFoo
называется O (n 2 ), что означает, что время, необходимое для выполнения quadraticFoo
, является функцией strings.size()
в квадрате.
Как только вы почувствуете сложность алгоритмического времени ваших программ, инструменты профилирования станут полезными. Например, вы сможете сказать, что если во время профилирования вы обнаружите, что метод обычно требует 1 мс для фиксированного размера ввода, если этот метод равен O (n), удвоение размера ввода приведет к времени выполнения 2 мс (1мс = n, следовательно, 2n = 2мс). Однако, если это O (n 2 ), удвоение размера ввода будет означать, что для выполнения вашего метода потребуется около 4 мс (1 мс = n 2 , следовательно (2n) 2 = 4 мс).