2015-07-13 5 views
15

Ich bin einem Job zur Optimierung der Leistung einer Anwendung zugewiesen.Kann das Übergeben eines Objekts an eine Methode die Leistung gegenüber dem Senden einzelner Parameter verbessern

Oft müssen 16-25 Parameter an den Konstruktor übergeben und dort gesetzt werden. Ich möchte ein Objekt der Klasse & dafür erstellen und diese Werte auf das Objekt setzen und dann übergeben. Es wird gut zu lesen sein. Aber wird es meiner Aufgabe gut tun (Leistungsoptimierung)?

+18

Passing, dass viele Parameter an einen Konstruktor zu verbessern ist ein Code Geruch ohnehin unabhängig von Performance. Bei so vielen Parametern ist es sehr wahrscheinlich, dass Sie einen Fehler machen (z. B. zwei Parameter des gleichen Typs umkehren). –

+0

http://stackoverflow.com/questions/5727336/performance-of-variable-argument-methods-in-java, das sollte Ihnen helfen. –

+1

Ich würde vorschlagen, verschiedene Aspekte Ihrer Anwendung zu profilieren, um festzustellen, wo die Flaschenhälse tatsächlich sind, bevor Sie versuchen, sie zu optimieren. Zum Beispiel alles, was den Netzwerkzugriff, schlecht geschriebene Datenbankabfragen usw. betrifft. – Romski

Antwort

15

Es könnte die Leistung leicht verbessern, aber der Hauptvorteil wäre die Lesbarkeit Ihres Codes zu erhöhen. Ein Konstruktor mit 16-25 Parametern ist nicht lesbar und sehr schwer zu benutzen.

Natürlich sollten Sie nur neue Klassen einführen, die Sinn machen (das heißt, die Parameter sind miteinander verwandt). Es hat keinen Sinn, 15 bis 26 nicht verwandte Parameter in eine Klasse zu schieben, nur um sie an einen Konstruktor zu übergeben.

+7

Warum glaubst du, dass es die Leistung verbessern würde? Erschaffst du nicht einfach ein zusätzliches Objekt? – Keppil

+2

@Keppil können Sie dieses Objekt möglicherweise einmal erstellen und an vielen Stellen verwenden. –

+1

@Keppil Nun, das Kopieren eines Verweises anstelle von 15-26 bei jedem Aufruf des Konstruktors kann einen kleinen Unterschied ausmachen. Andererseits würde das Instanziieren des neuen Objekts auch Zeit benötigen. Deshalb habe ich "es könnte" geschrieben. Wenn Sie diese neue Instanz einmal erstellen und in vielen Aufrufen des anderen Konstruktors wiederverwenden, wird möglicherweise eine kleine Verbesserung erzielt. – Eran

14

Leistungsunterschiede, die sich daraus ergeben, sind sehr unwahrscheinlich.

Wenn Ihre Aufgabe Performance-Probleme zu lösen, dann Ihre erste Aufgabe ist es zu finden, wo die Probleme sind. Sie tun das, indem Sie die Anwendung profilieren. Hast du das gemacht und hat gezeigt, dass das Problem in der Parameterübergabe liegt?

5

Es wäre in der modernen Software ziemlich ungewöhnlich seine 25 lose Variablen auf einer rufenden Funktion zu haben, und diese dann explizit auf ein Verfahren oder Ctor passieren.

Meistens werden diese Variablen in einem OO-Design stattdessen bereits in eine Klasse (oder einige wenige Klassen) gepackt, gruppiert nach ihren logischen Verantwortlichkeiten.

Und da Java Objekte als Referenz übergibt, könnte das Übergeben eines einzelnen Objektverweises auf dem Stapel einige Leistungsvorteile haben (weniger Variablen zum Stapeln). Der wirkliche Vorteil wäre jedoch die Lesbarkeit und Pflege des Codes.

Es muss jedoch beachtet werden, dass dies erfordert, dass die Klasse des übergebenen Objekts zwischen Benutzer und Service aufgeteilt wird - dies kann ein Problem sein, abhängig davon, was die Übertragungsklasse modelliert (z. B. eine Datenübertragung) Objekt, eine Geschäftseinheit, ein View-Modell, ein XML/JSON-Serialisierungsobjekt usw.?). Wenn das Teilen des Typs zwischen dem Aufrufer und dem Aufgerufenen Ihre Architektur verletzen würde, würden Sie normalerweise die 25 Variablen in eine andere geeignete kanonische Klasse (oder Klassen, die wiederum SRP Refactoring-Bedenken berücksichtigen) zuordnen und diese (diese) übergeben. Zu diesem Zeitpunkt wird es keinen Leistungsvorteil geben, aber der Vorteil der Lesbarkeit/Wartbarkeit bleibt erhalten.

0

Wie oops mehrere Eigenschaften in einer einzigen Einheit namens Klasse zusammenzuarbeiten vorschlagen, die durch ein Objekt dargestellt wird, so ist es die Leistung und die Bereitschaft Code

Verwandte Themen