2009-02-27 14 views

Odpowiedz

9

Metody statyczne byłoby bardzo nieznacznie lepszą wydajność i pamięć mądrości:

  1. Unikać (potencjalnego) napowietrznej wywołania funkcji wirtualnych.
  2. Eliminuje pamięć potrzebną do rzeczywistego wystąpienia klasy.
  3. Eliminuje konieczność uzyskiwania wystąpienia klasy podczas jej używania.

Tak czy inaczej prawdopodobnie nadal będę to robił singleton. Zyski, które uzyskasz, jeśli tego nie zrobisz, są prawdopodobnie tak małe, że przyniosą zerową różnicę nawet w środowisku mobilnym.

6

Czy potrafisz uniknąć takiej sytuacji i uczynić z niej regularne zajęcia?

Ignorując pytanie dotyczące wydajności, polecam unikanie singeltonów i statycznych metod w celu poprawy testowalności.

Singletony i metody statyczne mogą być bardzo trudne do przetestowania; pod tym względem singletony są zasadniczo statycznymi metodami, ale mają inną nazwę. Misko Hevery, który pracuje na Google Test team, ma kilka dobrych artykułów na ten temat:

2

przyjmowanie pytanie w wartości nominalnej, połączenia statyczne będzie prawdopodobnie wymagać najmniejszą ilość moc procesora. Powodem jest to, że normalne metody są wiązane dynamicznie i wymagają pewnego wyszukiwania w środowisku wykonawczym, podczas gdy statyczne metody są ograniczone czasem kompilacji.

Powiedziawszy to, prawdopodobnie nie będzie to miało znaczenia w twojej aplikacji. Różnica jest naprawdę niewielka. Jeśli twoja aplikacja robi coś z renderowaniem gui, xml, połączeniami internetowymi lub innymi manipulacjami zewnętrznymi, okaże się, że te działania karzeją proste wyszukiwania matematyczne przez ogromny czynnik.

Nawet jeśli nie, podczas profilowania istnieje większe prawdopodobieństwo, że napotkasz pojedyncze wąskie gardło podtrzymujące aplikację i odkryjesz, że nie jest to metoda wyszukiwania, ale pewna logika, którą zrobiłeś sam. Na przykład użyłeś listy array zamiast hashset, a metoda contains okazuje się droga.

W związku z tym, że wydajność w tych przypadkach nie ma większego znaczenia, polecam stosowanie implementacji pojedynczych obiektów powyżej metod statycznych, ponieważ projekt jest nieco bardziej elastyczny. Chociaż poza wybranymi przez ciebie opcjami rzuciłbym całkowicie klasy pomocników i wprowadziłam metody do twoich pojo.

4

Nie martw się o takie absurdalne mikrooptymalizacje. Martw się o łatwość konserwacji.

Wygląda na to, że ta aplikacja została napisana w całkowicie nieobsługiwanym stylu i może wiele zyskać na wyeliminowaniu większości "metod pomocniczych" i umieszczeniu ich tam, gdzie należą, z danymi, na których operują.

+0

OK, a następnie JDK jest napisany w stylu innym niż OO z wszystkimi jego Array.Sort(), Long.valueOf() itp.;) – yanchenko

+0

Istnieje duża różnica między posiadaniem statycznej metody tu i tam, a tym, że cała twoja aplikacja składa się wyłącznie z wartości obiektów i całej logiki w statycznych metodach (co może nie być tak naprawdę, ale tak brzmiałeś) . –

+0

@Michael: ale Android ma naprawdę niską pamięć. Rozważam twoje porady w tym poście i wpis na http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214

Powiązane problemy