Je suis à la phase de débogage/optimisation avec une application iPhone. J'ai un goulot d'étranglement à gauche - le seul endroit où le programme a un retard notable, et il est dans la boucle suivante: (A propos, j'ai renommé les vars avec des lettres et des types. (Les vrais noms sont beaucoup plus lisibles par l'homme dans l'application réelle, mais peu de sens hors contexte, donc j'espère que cela est assez clair) est ici la boucle:..Cette boucle peut-elle être optimisée?
for(i=0;i<xLong; i+=yFloat*zShort){
aFloat=0.0;
for(int j=i;j<i+yFloat*zShort;j++){
aFloat=hArray[j]/kFloat;
}
bNSNumber = [NSNumber numberWithFloat:aFloat];
[cNSMutableArray addObject:bNSNumber];
}
Toute la création d'opposition et nettoyage est en dehors de cette boucle
(Il devrait être assez simple ce qui se passe ici, mais fondamentalement, j'ai un très grand tableau (dans les millions) et je passe par ce tableau à des morceaux de longueur yFloat * zShort, en ajoutant tous les éléments dans ce morceau, et insérer cette somme finale dans un autre tableau. si hArray est long d'un million d'éléments, et que ma longueur de segment est 200, je vais additionner les 200 premiers éléments, insérer ce total dans cNSMutableArray, et passer aux 200 éléments suivants dans hArray. À la fin, cNSMutableArray aura une longueur de 5000 éléments.)
Lorsque la boucle externe est d'environ 25k et la boucle interne d'environ 200, ce code prend environ 4 secondes pour s'exécuter. Je voudrais bien le faire le plus possible, car dans le monde réel, la boucle extérieure pourrait être un peu plus grande.
Des idées pour accélérer ce processus?
Merci pour vos idées!
Ah ah! Vous avez trouvé un bug! Je ne résumais pas le bloc. Clairement c'était l'intention originale, mais il semble qu'à un certain moment, j'ai arrêté de faire cela, ce qui signifie que je venais de réinitialiser un Float à chaque pas, ce qui bien sûr je n'ai pas besoin de le faire. J'ai donc complètement supprimé la boucle interne, en définissant simplement la valeur à la première valeur de ce morceau et le temps est maintenant un quart de ce qu'il était. Merci! –
@Eric Christensen: L'optimisation par la suppression des fonctionnalités est une approche intéressante. Je suis curieux de savoir pourquoi l'utilisation du premier élément est aussi bonne que la moyenne du bloc? –
Le code que vous avez posté utilise réellement la dernière valeur du morceau, pas le premier si cela compte. –