Отдельные функции создания вместо одного большого одно медленное время обработки?

Если это не было, какой конструктор должен использоваться, если существует больше чем один?

существует больше информации об инициализации и осуществлении программ Java, доступных в Спецификация языка .

Java

9
задан Mel 23 October 2017 в 09:20
поделиться

4 ответа

Сосредоточьтесь на способности читать и легко понимать ваш код.

После того, как вы это сделаете, если у вас возникнет проблема с производительностью, посмотрите, что может ее вызывать.

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

При этом функции разделения действительно имеют (очень, очень незначительное) влияние на производительность. Тем не менее, я бы подумал об этом так - это может занять у вас скорость с 80 миль в час на шоссе до 79. 99 миль в час (чего вы никогда не заметите). Важно избегать светофоров и пробок, так как они заставят вас вообще остановиться ...

34
ответ дан 4 December 2019 в 05:56
поделиться

Почти во всех случаях «встраивание» функций для увеличения скорости похоже на стрижку для похудания.

18
ответ дан 4 December 2019 в 05:56
поделиться

Рид прав. Для рассматриваемого изменения стоимость вызова функции составляет небольшое количество циклов, и вам придется делать это 10 ^ 8 или около того раз в секунду, прежде чем вы заметите.

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

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

Следуя примеру с движением Рида, вызов функции может быть похож на объезд, и если объезд содержит объезды ,

4
ответ дан 4 December 2019 в 05:56
поделиться

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

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

Несколько лет назад я обнаружил, что функция гипотенузы (гипотенуза) в математической библиотеке, которую я использовал в приложении VC ++, была очень медленной. Мне это показалось смешным, потому что это такой простой набор функций - return sqrt (a * a + b * b) - насколько это сложно? Так что я написал свой, и мне удалось улучшить производительность в 16 раз. Затем я добавил к функции ключевое слово «inline» и сделал ее в 3 раза быстрее (примерно в 50 раз быстрее на данный момент). Затем я взял код из функции и поместил его в свой цикл, и увидел еще одно небольшое увеличение производительности. Итак ... да, это типы сценариев, в которых вы можете увидеть разницу.

Затем я добавил к функции ключевое слово «inline» и сделал ее в 3 раза быстрее (примерно в 50 раз быстрее на данный момент). Затем я взял код из функции и поместил его в свой цикл, и увидел еще одно небольшое увеличение производительности. Итак ... да, это типы сценариев, в которых вы можете увидеть разницу.

Затем я добавил к функции ключевое слово «inline» и сделал ее в 3 раза быстрее (примерно в 50 раз быстрее на данный момент). Затем я взял код из функции и поместил его в свой цикл, и увидел еще одно небольшое увеличение производительности. Итак ... да, это типы сценариев, в которых вы можете увидеть разницу.

2
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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