――Wie oft haben Sie geschrieben, seit Sie codiert haben? Lol ――Selbst wenn Sie Zehntausende Male schreiben, fragen Sie sich manchmal, ob Sie switch verwenden sollen oder ob, oder? ?? (Ich kann besorgt sein)
-Bei der Auswahl einer if-Anweisung:&&Und||Wann du willst
――Wenn Sie interessiert sind, sollten Sie es messen, richtig? Ich denke
CheckPerformance.java
import java.util.stream.IntStream;
public class CheckPerformance {
public static void main(String[] args) {
Long start = System.currentTimeMillis();
//wenn Ausführung
IntStream.rangeClosed(0, 100).forEach(i -> {
if (i % 2 == 0) {
System.out.println("Ist gerade");
} else if (i % 2 == 1) {
System.out.println("Ist ungerade");
} else {
System.out.println("Andere");
}
});
//Switch-Ausführung
IntStream.rangeClosed(0, 100).forEach(i -> {
switch (i % 2) {
case 0:
System.out.println("Ist gerade");
break;
case 1:
System.out.println("Ist ungerade");
break;
default:
System.out.println("Andere");
break;
}
});
Long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
}
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 7ms | 12ms |
Zweites Mal | 15ms | 10ms |
Drittes Mal | 13ms | 12ms |
4 .. | 8ms | 15ms |
5. Mal | 10ms | 10ms |
――Ich habe es mehrmals ausgeführt, aber es wurde wie ein Glücksspiel, und ich entschied, dass es schwierig sein würde, den Leistungsunterschied mit 100 Mal zu überprüfen.
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 36ms | 39ms |
Zweites Mal | 33ms | 35ms |
Drittes Mal | 31ms | 28ms |
4 .. | 38ms | 39ms |
5. Mal | 38ms | 34ms |
――Hmm, es ist subtil, den Leistungsunterschied sogar 1000-mal zu überprüfen ――Ich habe immer noch das Gefühl, dass es hier in der Kategorie der Fehler liegt.
--Quelle ist (ry
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 133ms | 119ms |
Zweites Mal | 147ms | 136ms |
Drittes Mal | 116ms | 121ms |
4 .. | 135ms | 130ms |
5. Mal | 128ms | 136ms |
――Hmm, sogar 10.000 Mal ... (ry
--Quelle ist (ry
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 903ms | 917ms |
Zweites Mal | 947ms | 885ms |
Drittes Mal | 1012ms | 964ms |
4 .. | 1109ms | 947ms |
5. Mal | 943ms | 884ms |
――Ich habe das Gefühl, dass es nach 100.000 Mal einen leichten Leistungsunterschied gab. ――Der Schalter hat 1 Sekunde 0 Mal überschritten, aber es gibt 2 Wenns. ――Jedoch kann der Fehler ein Fehler sein, und wenn Sie nur den Durchschnittswert betrachten, kann der Wechsel schneller sein? Die Hypothese kam »Aber ich mache mir ein bisschen Sorgen, also füge ich eine weitere Ziffer hinzu und führe sie aus.
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 6366ms | 6339ms |
Zweites Mal | 6410ms | 6396ms |
Drittes Mal | 6794ms | 6298ms |
4 .. | 6730ms | 6248ms |
5. Mal | 6823ms | 6495ms |
――So bin ich bis zu einem gewissen Grad zufrieden, daher werde ich die Anzahl der Filialen erhöhen. ――Von hier habe ich festgestellt, dass es nicht viel Sinn macht, 100 Fälle zu machen, also werde ich mit 1 Million Fällen arbeiten.
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 6348ms | 6476ms |
Zweites Mal | 6751ms | 6354ms |
Drittes Mal | 6461ms | 6324ms |
4 .. | 6500ms | 6411ms |
5. Mal | 6537ms | 6646ms |
――Sie können den Leistungsunterschied nach 3 Zweigen erkennen. ――Wenn Sie sich den Durchschnittswert ansehen, ist der Wechsel etwas schneller, nicht wahr? ――Jedoch kann es ein Fehler sein, also erhöhen Sie die Anzahl der Zweige.
――Ich habe mich wegen der einfachen Berechnung und meiner Stimmung für fünf entschieden.
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 6528ms | 6279ms |
Zweites Mal | 6452ms | 6507ms |
Drittes Mal | 6661ms | 6599ms |
4 .. | 6501ms | 6589ms |
5. Mal | 6608ms | 6322ms |
»Es geht darum, den Titel zu holen, aber es ist meine Schlussfolgerung ――Ich habe nur 1 Million Fälle ausgeführt, aber mir ist bewusst, dass sich dies ändern kann, wenn weitere hinzugefügt werden. ―― Es scheint jedoch, dass sich die Leistung zwischen if und switch je nach Anzahl der Zweige und Anzahl der Prozesse nicht wesentlich ändert. Daher halte ich es für richtig, eine Implementierung zu wählen, die je nach Zeit leichter zu lesen ist. ――Wenn etwas nicht stimmt oder wenn Sie es eher so überprüfen sollten, hinterlassen Sie bitte einen Kommentar oder eine Bearbeitungsanfrage!
Main.java
import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long start = System.currentTimeMillis();
IntStream.rangeClosed(0, 10000000).forEach(
num -> {
if (num % 2 == 0) {
int num2 = 2;
} else if (num % 2 == 1){
int num3 = 2;
} else {
int num4 = 2;
}
}
);
IntStream.rangeClosed(0, 10000000).forEach(
num -> {
switch (num % 2) {
case 0:
int num2 = 2;
break;
case 1:
int num3 = 2;
break;
default:
int num4 = 2;
break;
}
}
);
long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");
}
}
X. Mal | Anzahl der Sekunden, die ausgeführt werden sollen, wenn | Anzahl der Sekunden, um die Umschaltung auszuführen |
---|---|---|
1. Mal | 79ms | 70ms |
Zweites Mal | 81ms | 64ms |
Drittes Mal | 90ms | 62ms |
4 .. | 86ms | 67ms |
5. Mal | 83ms | 63ms |
―― Nach dem Drehen von 10 Millionen Fällen gab es einen Leistungsunterschied von etwa 20 ms, aber ich frage mich, ob es kein Problem mit der Schlussfolgerung gibt, dass es fast keinen Unterschied gibt.
Recommended Posts