Statische Methoden oder Singletons performance (Android)?

8

In einer App mit einer kleinen Anzahl von POJOs und vielen Hilfsmethoden, die auf ihnen operieren, was ist leistungsmäßig besser: die Helper-Klassen Singletons zu machen oder die Methoden statisch zu machen?

    
yanchenko 27.02.2009, 15:49
quelle

4 Antworten

9

Statische Methoden wären in Leistung und Speicher etwas besser:

  1. Vermeiden Sie (potenziellen) Overhead von virtuellen Funktionsaufrufen.
  2. Macht den Speicher für eine tatsächliche Instanz der Klasse überflüssig.
  3. Beseitigt die Notwendigkeit, eine Instanz der Klasse zu erhalten, wenn Sie sie verwenden.

Aber ehrlich gesagt würde ich es wahrscheinlich trotzdem zu einem singleton machen. Die Gewinne, die Sie erzielen würden, wenn Sie es nicht tun, sind wahrscheinlich so gering, dass sie selbst in einer mobilen Umgebung keinen Unterschied machen würden.

    
Eric Petroelje 27.02.2009, 15:58
quelle
6

Können Sie beide Situationen vermeiden und sie zu regelmäßigen Klassen machen?

Wenn ich die Leistungsfrage ignoriere, empfehle ich die Vermeidung von Singeltons und statischen Methoden, um Ihre Testbarkeit zu verbessern.

Singletons und statische Methoden können sehr schwer zu testen sein; In dieser Hinsicht sind Singletons im Wesentlichen statische Methoden, aber mit einem anderen Namen. Misko Hevery , der am Google-Testteam , hat ein paar gute Artikel zu diesem Thema:

matt b 27.02.2009 16:13
quelle
4

Mach dir keine Sorgen über absurde Mikrooptimierungen wie diese. Sorge um Wartbarkeit.

Es klingt so, als ob diese Anwendung in einem völlig nicht-OO-Stil geschrieben ist und viel davon profitieren könnte, die meisten dieser "Hilfsmethoden" zu eliminieren und sie dort zu platzieren, wo sie hingehören, mit den Daten, auf denen sie arbeiten.

    
Michael Borgwardt 27.02.2009 16:14
quelle
2

Wenn Sie Ihre Frage auf den Nennwert stellen, benötigen statische Anrufe wahrscheinlich die geringste CPU-Leistung. Der Grund dafür ist, dass normale Methoden dynamisch gebunden sind und zur Laufzeit etwas Nachschlagen erfordern, während statische Methoden an eine Kompilierzeit gebunden sind.

Nachdem dies gesagt wurde, wird es wahrscheinlich nicht in Ihrer Anwendung von Bedeutung sein. Der Unterschied ist wirklich klein. Wenn Ihre Anwendung etwas mit GUI, XML-Rendering, Internet-Verbindungen oder anderen externen Manipulationen macht, werden Sie feststellen, dass diese Aktivitäten die einfachen Mathod-Lookups um einen großen Faktor in den Schatten stellen.

Selbst wenn Sie dies nicht tun, stoßen Sie beim Profiling eher auf einen einzigen Engpass, der Ihre Anwendung hält und entdeckt, dass es sich nicht um die Methode Lookup handelt, sondern um eine Logik, die Sie selbst gemacht haben. Zum Beispiel haben Sie eine Arraylist anstelle eines Hashsets verwendet und die Methode contains ist teuer.

Damit die Leistung in diesen Fällen nicht wirklich wichtig ist, würde ich empfehlen, die Singleton-Implementierungen über den statischen Methoden zu verwenden, da das Design etwas flexibler ist. Obwohl außerhalb der Möglichkeiten, die du angeboten hast, würde ich die Hilfsklassen komplett streichen und die Methoden in deine Pojos integrieren.

    
DefLog 27.02.2009 16:13
quelle