W aplikacji z niewielką liczbą POJO i wieloma metodami pomocniczymi, które działają na nich, co jest lepsze pod względem wydajności: aby uczynić klasy pomocnicze singletonami lub uczynić metody statycznymi?Metody statyczne lub Singletons pod względem wydajności (Android)?
Odpowiedz
Metody statyczne byłoby bardzo nieznacznie lepszą wydajność i pamięć mądrości:
- Unikać (potencjalnego) napowietrznej wywołania funkcji wirtualnych.
- Eliminuje pamięć potrzebną do rzeczywistego wystąpienia klasy.
- 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.
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:
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.
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ą.
- 1. Jak porównać funkcje Pythona pod względem wydajności?
- 2. , która jest lepsza pod względem wydajności parsowania w systemie Android, XML lub JSON?
- 3. Skompresowany/skompilowany JavaScript a nieskompresowany JavaScript pod względem wydajności
- 4. Erlang "catch" ekspresji vs try/catch pod względem wydajności
- 5. Który z nich jest lepszy pod względem wydajności?
- 6. Zmienione względem zmiennych zmiennych pod względem przechwytywania
- 7. co jest lepsze pod względem wydajności, wczesne wiązanie lub późnego wiązania w Delphi COM obiektów
- 8. C# wirtualne (lub abstrakcyjne) metody statyczne
- 9. Pod względem stylu: <br> lub dopełnienia/elementów marginesowych
- 10. Co oznacza mały ślad pod względem programowania?
- 11. Python Metody statyczne, dlaczego?
- 12. Polimorfizm i Metody statyczne
- 13. Funkcje a metody statyczne
- 14. Metody statyczne w PHP
- 15. F # Prywatne metody statyczne
- 16. Metody statyczne klasy Python
- 17. statyczne metody przedłużania
- 18. AtomicXXX.lazySet (...) pod względem występowania przed krawędziami
- 19. Najszybszy sposób (pod względem wydajności), aby przekształcić ciąg w tablicę bajtów [] w C#
- 20. Która funkcja jest najlepsza pod względem wydajności i czasu użytkowania stosu
- 21. W którym momencie jest pakowanie FileOutputStream z sensie BufferedOutputStream, pod względem wydajności?
- 22. Jak PostgreSQL PL/Python porównać z Python poza nim pod względem wydajności?
- 23. zakres vs ctags pod względem funkcji
- 24. Co to jest pozycja pod względem sekwencji?
- 25. Tablice i listy połączone pod względem lokalizacji
- 26. drzewo binarne statyczne metody Java
- 27. Publiczne metody statyczne a metody publiczne
- 28. Metody "statyczne" mongoozy a metody "instancji"
- 29. Zniszczenie Zamówienie Meyersa singletons
- 30. Singletons in Dagger 1.x
OK, a następnie JDK jest napisany w stylu innym niż OO z wszystkimi jego Array.Sort(), Long.valueOf() itp.;) – yanchenko
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ś) . –
@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