―― Combien de fois avez-vous écrit si depuis que vous avez codé? Lol ――Même si vous écrivez des dizaines de milliers de fois, vous vous demandez parfois s'il faut utiliser switch ou si, non? ?? (Je suis peut-être inquiet)
-Lors du choix d'une instruction if:&&Et||Quand tu veux
――Si vous êtes intéressé, vous devriez le mesurer, non? je pense
--Le code exécuté est ci-dessous
CheckPerformance.java
import java.util.stream.IntStream;
public class CheckPerformance {
public static void main(String[] args) {
Long start = System.currentTimeMillis();
//si exécution
IntStream.rangeClosed(0, 100).forEach(i -> {
if (i % 2 == 0) {
System.out.println("Est même");
} else if (i % 2 == 1) {
System.out.println("Est impair");
} else {
System.out.println("Autre");
}
});
//Exécution du commutateur
IntStream.rangeClosed(0, 100).forEach(i -> {
switch (i % 2) {
case 0:
System.out.println("Est même");
break;
case 1:
System.out.println("Est impair");
break;
default:
System.out.println("Autre");
break;
}
});
Long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
}
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 7ms | 12ms |
Deuxième fois | 15ms | 10ms |
Troisième fois | 13ms | 12ms |
4e | 8ms | 15ms |
5ème fois | 10ms | 10ms |
«Je l'ai couru plusieurs fois, mais c'est devenu comme un jeu de chance, alors j'ai décidé qu'il serait difficile de vérifier la différence de performance avec 100 fois.
--Source omise
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 36ms | 39ms |
Deuxième fois | 33ms | 35ms |
Troisième fois | 31ms | 28ms |
4e | 38ms | 39ms |
5ème fois | 38ms | 34ms |
――Hmm, il est subtil de vérifier la différence de performance même 1000 fois «J'ai toujours le sentiment que c'est dans la catégorie de l'erreur ici.
--La source est (ry
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 133ms | 119ms |
Deuxième fois | 147ms | 136ms |
Troisième fois | 116ms | 121ms |
4e | 135ms | 130ms |
5ème fois | 128ms | 136ms |
――Hmm, même 10000 fois ... (ry
--La source est (ry
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 903ms | 917ms |
Deuxième fois | 947ms | 885ms |
Troisième fois | 1012ms | 964ms |
4e | 1109ms | 947ms |
5ème fois | 943ms | 884ms |
«Je pense qu'il y avait une légère différence de performance après 100 000 fois. ――Le commutateur a dépassé 1 seconde 0 fois, mais il y a 2 ifs. ――Cependant, l'erreur peut être une erreur, et si vous ne regardez que la valeur moyenne, le changement peut être plus rapide? L'hypothèse est venue ――Mais je suis un peu inquiet, alors je vais ajouter un autre chiffre et l'exécuter.
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 6366ms | 6339ms |
Deuxième fois | 6410ms | 6396ms |
Troisième fois | 6794ms | 6298ms |
4e | 6730ms | 6248ms |
5ème fois | 6823ms | 6495ms |
«Donc, je suis satisfait dans une certaine mesure, donc je vais augmenter le nombre de succursales. «À partir de là, j'ai trouvé que cela n'a pas beaucoup de sens de faire 100 cas, donc je vais effectuer avec 1 million de cas.
--Omettre la source
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 6348ms | 6476ms |
Deuxième fois | 6751ms | 6354ms |
Troisième fois | 6461ms | 6324ms |
4e | 6500ms | 6411ms |
5ème fois | 6537ms | 6646ms |
――Vous pouvez voir la différence de performance après 3 branches. ――Lorsque vous regardez la valeur moyenne, le changement est un peu plus rapide, n'est-ce pas? ――Cependant, cela peut être une erreur, alors augmentez le nombre de branches.
«J'en ai choisi cinq en raison de la commodité du calcul et de mon humeur.
Xème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 6528ms | 6279ms |
Deuxième fois | 6452ms | 6507ms |
Troisième fois | 6661ms | 6599ms |
4e | 6501ms | 6589ms |
5ème fois | 6608ms | 6322ms |
C'est une question d'attraper le titre, mais c'est ma conclusion «Je n'ai exécuté qu'un million de dossiers, mais je suis conscient que cela peut changer si d'autres sont ajoutés. Cependant, il semble que les performances ne changent pas de manière significative entre if et switch en fonction du nombre de branches et du nombre de processus, donc je pense qu'il est correct de choisir une implémentation plus facile à lire en fonction du temps. ――Si quelque chose ne va pas, ou si vous devriez le vérifier plus comme ça, veuillez laisser un commentaire ou une demande de modification!
--Dans le commentaire, vous avez souligné que println est trop lourd, j'ai donc essayé de le réparer.
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ème fois | nombre de secondes à exécuter si | Nombre de secondes pour exécuter le commutateur |
---|---|---|
1ère fois | 79ms | 70ms |
Deuxième fois | 81ms | 64ms |
Troisième fois | 90ms | 62ms |
4e | 86ms | 67ms |
5ème fois | 83ms | 63ms |
«Il y avait une différence de performance d'environ 20 ms après avoir tourné 10 millions de caisses, mais je me demande s'il n'y a pas de problème avec la conclusion qu'il n'y a presque pas de différence. ――La validation du code d'octet se fera à une date ultérieure!
Recommended Posts