Optimisation code JAVA
babyboystwo
Messages postés
10
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je souhaite optimiser la fonction java « fctAmeliorable» afin d'améliorer la rapidité d'exécution de la fonction sans modifier son comportement pour autant en utilisant de bonnes pratiques de code communes aux principaux langages orientés objet.
Note : la liste retournée par cette fonction n'est utilisée par les fonctions appelantes que pour des parcours.
Voici donc la fonction que je souhaite avoir une version optimisée.
public final List<Double> fctAmeliorable() {
List<Double> locDbValueList = new LinkedList<Double> ();
for (int i = 0; i < 50000; ++i) {
Calendar locMyCalendar = new GregorianCalendar ();
locDbValueList.add(getNewDbValue(locMyCalendar.get(Calendar.YEAR), i));
}
updateList(locDbValueList) ;
Integer locResult = 0 ;
for (int i = 0; i < locDbValueList.size(); ++i) {
final Integer locTempVal = doOperation(locDbValueList.get(i));
if (locTempVal != null) {
locResult += locTempVal;
}
}
applyResult(locResult) ;
return locDbValueList;
}
private Double getNewDbValue(int parYear, int parIdx) { ... }
private void updateList(List<Double> valList) { ... } // Modifie valeurs (mais pas la taille) de liste donnée en paramètre
private int doOperation (Double parDbRefValue) { ... }
private void applyResult (int parIntValue) { ... } // Applique un traitement en fonction du paramètre
Je vous demande juste quelques conseils pour pouvoir me situer
Merci d'avance.
Je souhaite optimiser la fonction java « fctAmeliorable» afin d'améliorer la rapidité d'exécution de la fonction sans modifier son comportement pour autant en utilisant de bonnes pratiques de code communes aux principaux langages orientés objet.
Note : la liste retournée par cette fonction n'est utilisée par les fonctions appelantes que pour des parcours.
Voici donc la fonction que je souhaite avoir une version optimisée.
public final List<Double> fctAmeliorable() {
List<Double> locDbValueList = new LinkedList<Double> ();
for (int i = 0; i < 50000; ++i) {
Calendar locMyCalendar = new GregorianCalendar ();
locDbValueList.add(getNewDbValue(locMyCalendar.get(Calendar.YEAR), i));
}
updateList(locDbValueList) ;
Integer locResult = 0 ;
for (int i = 0; i < locDbValueList.size(); ++i) {
final Integer locTempVal = doOperation(locDbValueList.get(i));
if (locTempVal != null) {
locResult += locTempVal;
}
}
applyResult(locResult) ;
return locDbValueList;
}
private Double getNewDbValue(int parYear, int parIdx) { ... }
private void updateList(List<Double> valList) { ... } // Modifie valeurs (mais pas la taille) de liste donnée en paramètre
private int doOperation (Double parDbRefValue) { ... }
private void applyResult (int parIntValue) { ... } // Applique un traitement en fonction du paramètre
Je vous demande juste quelques conseils pour pouvoir me situer
Merci d'avance.
A voir également:
- Optimisation code JAVA
- Optimisation pc - Accueil - Utilitaires
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Code ascii - Guide
- Code puk bloqué - Guide
2 réponses
Faire des get(i) sur une LinkedList c'est très moche (comprendre : pas optimal), si tu as besoin de faire des get(i) utilises une ArrayList, sinon utilises des Iterator (éventuellement implicites avec une boucle for each).
De plus utiliser des Integer (et les Wrapper en général) c'est plus lourd qu'utiliser directement un int, d'autant que du coup tu fais des tests de la valeur null qui sont inutiles (dans ton cas).
Exemple d'amélioration :
De plus utiliser des Integer (et les Wrapper en général) c'est plus lourd qu'utiliser directement un int, d'autant que du coup tu fais des tests de la valeur null qui sont inutiles (dans ton cas).
Exemple d'amélioration :
Integer locResult = 0 ;
for (int i = 0; i < locDbValueList.size(); ++i) {
final Integer locTempVal = doOperation(locDbValueList.get(i));
if (locTempVal != null) {
locResult += locTempVal;
}
}
int locResult=0;
for (Double d : locDbValueList)
locResult += doOperation(d);La confiance n'exclut pas le contrôle
t'as pas oublié la variable locTempVal dans la partie du code que t'as amélioré ?