Скорость доступа к статическим функциям - PullRequest
1 голос
/ 21 сентября 2011

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

Или, другими словами, предпочтительнее использовать либо fh1, либо fh2?В fh1 распределение избегается, но fh2 кажется более простым.В этом случае Gf () является относительно простым методом, который будет вызываться часто.Также часто будут вызываться fh2 и fh1 (потенциально до 30 раз в секунду).

Псевдокод:

class G {
  static method int f() {.......}
}

class H {
  method fh1(){
    somemethod1(G.f());
    somemethod2(G.f());
    somemethod3(G.f());
  }

  method fh2(){
    int a = G.f();
    somemethod1(a);
    somemethod2(b);
    .....
  }
}

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

30 раз в секунду не часто (часто 1 миллион раз в секунду). Следовательно, здесь нет проблем, поэтому не оптимизируйте их.

Сказав, что fh2 будет более эффективным, распределение будет дешевле, чем вызовы функций.

1 голос
/ 21 сентября 2011

Вы не "выделяете" и не "собираете мусор" целое число в вашем примере.

Скорее, в fh2, жизнь в стеке, и ему не нужно дополнительное время для его выделения / освобождения.

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

1 голос
/ 21 сентября 2011

Причина, по которой я бы использовал статический метод в этой конкретной ситуации, заключается в том, что значение int могло измениться.Другими словами, если Gf () выполняет некоторую логику и 1-й вызов может отличаться от 10-го, обязательно используйте статический метод.Статические методы, подобные этому, обеспечивают способ уменьшить код, повторно используя логику и поддерживая логику в управляемом состоянии, поэтому, если необходимо изменить логику, вам нужно изменить ее только в одном месте.

При этом в методе fh1, каков будет потенциал для изменения результатов, если Gf () изменится за промежуток времени, необходимый для вызова Gf () три раза в fh1 ()?Вероятно, очень маленький, но все же стоит рассмотреть.

Я бы, наверное, выбрал fh2 () для согласованности.Разница в производительности, вероятно, незначительна.

0 голосов
/ 21 сентября 2011

Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация - корень всех зол.Однако мы не должны упускать наши возможности в этих критических 3%.Такие рассуждения не приведут к самоуспокоенности хорошего программиста, он посмотрит внимательно на критический код;но только после того, как этот код был идентифицирован

© Donald Knuth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...