Статические методы или производительность синглтонов (Android)? - PullRequest
8 голосов
/ 27 февраля 2009

В приложении с небольшим количеством POJO и множеством вспомогательных методов, которые работают с ними, что может быть лучше с точки зрения производительности: сделать синглтоны классов помощников или статические методы?

Ответы [ 4 ]

10 голосов
/ 27 февраля 2009

Статические методы были бы немного лучше по производительности и памяти:

  1. Избегайте (потенциальных) накладных расходов на вызовы виртуальных функций.
  2. Удаляет память, необходимую для фактического экземпляра класса.
  3. Устраняет необходимость получать экземпляр класса при его использовании.

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

6 голосов
/ 27 февраля 2009

Можете ли вы избежать любой ситуации и сделать их регулярными занятиями?

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

Синглетоны и статические методы могут быть очень сложными для тестирования; в этом отношении синглтоны - это по существу статические методы, но с другим названием. Misko Hevery , работающий в Google Test team , имеет несколько хороших статей на эту тему:

4 голосов
/ 27 февраля 2009

Не беспокойтесь о таких абсурдных микрооптимизациях. Беспокойство по поводу ремонтопригодности.

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

2 голосов
/ 27 февраля 2009

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

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

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

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

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