Hi Dennis !
Codeoptimierung finde ich eine sehr spannenden Aufgabe, sie kann den Unterschied zwischen Nicht-Durchführbarkeit des Projektes und Erfolg ausmachen.
Meine Kenntnissse beruhen auf C/C++ Optimierung. Ich denke, aber dass bei Java es ähnlich läuft.
Dein Code ist nicht optimal, ich würde ihn sogar das extrem schlecht bezeichnen - so daß Du noch enormes Potential hast. Pi mal Daumen sind 99.9 deiner Berechnungen während der Laufzeit überflüssig wenn mans umformt.
Jede noch so kleine Rechenoperation kostet Zeit.
So auch
pixsize*2 (wenn pixsize keine Konstante ist)
pixel_X[i] ist eine Operator - die Adresse der Variable zu berechnet werden (&X[0]) + i*sizeof(int) in C
Diese und ähnliche Operationen werden permanent in der inneren Schleife ausgerechnet.
Du solltes alles das was in der inneren Schleife konstant ist nur einmal außen berechnen und in der inneren Schleife verwenden.
int PixsizeMal2 = pixsize * 2
int Pixel_Xi = Pixel_x[i]
etc.
switch verwenden statt die cases mit vielen ifs testen.
Die Logik umbauen:
if(pixel_x[i] < pixel_x[q] && absx < pixsize*2 && absy < pixsize*2)
rechts = false;
if(pixel_x[i] > pixel_x[q] && absx < pixsize*2 && absy < pixsize*2)
links = false;
Diese beiden Ifs enthalten teilweise dieselbe Bedingunge.
Wie java die ifs mit mehreren Bedingungen optimiert weiß ich nicht. In C++ kann man einstellen, das nicht alle Bedingungen getestet werden, wenn die 1. schon nicht stimmt.
Jedenfall würde ich umformulieren
if(absx < pixsize*2 && absy < pixsize*2)
{
if(pixel_x[i] < pixel_x[q])
...........
if(pixel_x[i] > pixel_x[q])
................
}
Also generell so schachteln, so das möglichst früh und möglichst einfach die "großen" Entscheidungen getroffen werden.
if(a && b && c)
if(a && b && d)
===>
if(a && b)
if(c)
if(d)
So allg. betrachtet lassen sich deine 2 Schleifen bestimmt triangulieren und einen factor 2 sparen
D.h.
Kommt für indicees q i bzw. i q nicht dasselbe raus.
int absx = Math.abs(pixel_x[q] - pixel_x[i]);
-------------------------------------------------------------------------------------
Versuche mal die Optimierungen einzubauen.
Da ich auch an Java-Code-Optimierung interessiert bin wäre es nett wenn Du berichtest was das gebracht hat, damit wir auch was lernen.
Deinen neuen Code kannst Du ja dann posten. Ich finden bestimmt noch was zum optimieren.
— geändert am 20.12.2012, 10:24:06
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.