2009-02-27 11 views

risposta

9

metodi statici sarebbe molto leggermente migliori prestazioni e della memoria saggio:

  1. Evitare (potenziale) sovraccarico di chiamate di funzione virtuali.
  2. Elimina la memoria necessaria per un'istanza effettiva della classe.
  3. Elimina la necessità di ottenere un'istanza della classe quando la si utilizza.

Ma sinceramente probabilmente lo renderei comunque uno singleton. I guadagni che otterresti non facendolo sono probabilmente così limitati da rendere zero la differenza, anche in un ambiente mobile.

6

È possibile evitare entrambe le situazioni e renderle regolari?

Ignorando la domanda relativa alle prestazioni, si consiglia di evitare singoli algoritmi e metodi statici per migliorare la testabilità.

Singleton e metodi statici possono essere molto difficili da testare; a questo proposito i singleton sono metodi essenzialmente statici ma con un nome diverso. Misko Hevery, che lavora sulla Google Test team, ha alcuni buoni articoli su questo argomento

2

Prendendo la tua domanda al valore nominale, le chiamate statiche probabilmente richiederà la minor quantità di potenza della cpu. Il motivo è che i metodi normali sono legati dinamicamente e richiedono una certa ricerca in fase di esecuzione mentre i metodi statici sono legati a un tempo di compilazione.

Detto questo, probabilmente non avrà importanza nella vostra applicazione. La differenza è davvero piccola. Se la tua applicazione fa qualsiasi cosa con gui, rendering xml, connessioni internet o altre manipolazioni esterne, scoprirai che queste attività rendono minima la semplice ricerca di Maths da un fattore enorme.

Anche se non lo si fa, durante la profilazione è più probabile che si verifichi un unico collo di bottiglia che sorregge la propria applicazione e si scopre che non è la ricerca del metodo, ma una logica che si è fatta da sé. Ad esempio hai usato un arraylist invece di un hashset e il metodo contiene risulta essere costoso.

Così come le prestazioni in questi casi non contano davvero, consiglierei di utilizzare le implementazioni dei singleton sopra i metodi statici in quanto il design è leggermente più flessibile. Anche se al di fuori delle scelte che hai offerto, lascerei cadere completamente le classi di supporto e incorporerò i metodi nel tuo pojo.

4

Non preoccuparti di micro-ottimizzazioni assurde come quella. Preoccuparsi della manutenibilità.

Sembra che l'applicazione sia scritta in uno stile totalmente non OO e potrebbe trarre molto vantaggio dall'eliminare la maggior parte di quei "metodi di supporto" e metterli a cui appartengono, con i dati su cui operano.

+0

Ok, allora JDK è scritto in stile non OO e con tutti i suoi Arrays.sort(), Long.valueOf(), ecc.;) – yanchenko

+0

C'è una grande differenza tra avere un metodo statico qua e là, e avere l'intera app composta da nient'altro che oggetti di valore e tutta la logica in metodi statici (che potrebbe non essere proprio così, ma è così che l'hai fatta suonare) . –

+0

@ Michael: ma Android ha davvero poca memoria. Sto prendendo in considerazione i tuoi consigli in questo post e un post su http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214

Problemi correlati