2010-09-09 6 views
0

Je prends un jour de congé en me cognant la tête contre la gestion de la mémoire et les opengl-es pour essayer d'augmenter l'efficacité. Une partie de l'application sur laquelle nous travaillons accède à de vastes tables de données. Ces données nous ont été fournies sous forme de déclarations de commutation, principalement.Grandes déclarations de commutateur et efficacité

En tout, J'ai quatre instructions de commutation, chacune avec plus de 2000 cas, devrait croître. Dans quelle mesure le temps d'accès sera-t-il médiocre? Est-ce que cela vaut la peine de chercher des fruits d'optimisation pour le moment ou est-ce un gros non-non pour les compilateurs Objective-C?

+3

profil, profil, profil! –

+2

Généralement, les instructions 'switch' sont très efficaces, elles finissent par être compilées sous la forme d'une table de saut qui est rapide à accéder. Cela ne signifie pas que votre code est très facile à maintenir! – slugster

Répondre

1

Les commutateurs sont généralement assez rapides, car ils ne font que des comparaisons entières.

Si vous voulez vraiment optimiser micro, certains types de données peuvent être stockés dans des tableaux C pour une recherche extrêmement rapide en utilisant l'arithmétique du pointeur. C'est quelque chose que vous devriez seulement regarder si vous avez vraiment besoin de la vitesse supplémentaire - l'arithmétique de pointeur implique beaucoup de bugs potentiels, dont beaucoup peuvent être assez difficiles à déboguer.

La vraie question est: avez-vous fait un profilage? Shark est un outil très efficace quand il s'agit de profiler le temps des applications iOS - utilisez-le, et voyez combien de temps d'exécution est passé sur votre code de cas de commutateur. Si c'est moins de 5-10%, il n'y a probablement aucune raison d'envisager même l'optimisation.

+0

Il semble être inférieur à 10%, environ 7% je crois, mais nous l'appelons 100 000 fois pour chaque artefact produit par l'application (et nous produisons ces derniers presque constamment, l'un après l'autre. Pour être un goulot d'étranglement, mais je pense que c'est assez désordonné pour en devenir un. – mtrc

+0

Comme d'autres l'ont dit, faites d'abord un profil de l'application et ne refactorisez pas la chose pour le simple plaisir de refactoriser. Si le principe de la refactorisation est de changer le code sans changer son comportement, chaque refactoring a le potentiel d'introduire un défaut, et j'attends qu'il devienne * nécessaire * de le refactoriser. cassé, ne le répare pas. –