/** * * @author metz * Zeitmessung von Schleifendurchläufen * Um Verzerrungen durch unkontrollierbare System-/Netzwerkaktivität auszuhebeln, empfiehlt es sich wahrscheinlich, die Anzahl der Messungen sehr hoch zu setzen und den zu messenden Prozess sehr “kurz” zu gestalten (also z.B.: 1.000.000 Messungen einer 100er-Schleife ist besser als 100 Messungen einer 1.000.000er-Schleife). */ public class Schleife { // rounds: Wie oft wird der prozess gemessen? protected int rounds = 1000000; // runden: Wie oft wird im Prozess eine Schleife ausgeführt? protected int runden = 100; // sammlung: Array mit allen Messergebnissen (in Nanosekunden) protected long[] sammlung; /** * Konstruktor */ public Schleife() { sammlung = new long[this.rounds]; } /** * Ruft den Prozess rounds mal auf und misst jedes mal die Zeit */ public void mehrfachmessung() { for (int r = 0; r < this.rounds; r++) { long start = System.nanoTime(); this.prozess(); long endzeit = System.nanoTime(); long dauer = endzeit - start; // syso-Ausgabe verzerrt Ergebnisse, deshalb besser nicht: // System.out.println("DAUER: " + dauer); // Sammlung d. Messergebnisse im Array benötigt natürlich auch Rechenzeit this.sammlung[r] = dauer; } this.auswerten(); } /** * Der Prozess */ public void prozess() { double dings = 0; for (int i = 0; i < this.runden; i++) { // Prozess, wird runden mal ausgeführt dings = dings + Math.random(); } } public void auswerten() { // durchschnitt long sum = 0; for (int ind = 0; ind < this.sammlung.length; ind++) { sum += this.sammlung[ind]; } long durchschnitt = sum / this.sammlung.length; System.out.println("durchschnittliche Dauer der Messung in Nanosekunden: " + durchschnitt); } }