Comment voir quelles parties de votre code sont exécutées le plus souvent?

11

J'aimerais pouvoir voir quel code dans des milliers de lignes de code source est exécuté le plus souvent et prend le plus de temps. L'objectif serait d'optimiser.

Être capable de voir quelles parties du code sont exécutées le plus souvent est important pour l'optimisation, car ces parties sont celles sur lesquelles je dois me concentrer pour accélérer. Dans le même temps, bien sûr, du code est exécuté très souvent mais ne prend pratiquement pas de temps, il est donc également important de pouvoir voir quel code prend le plus de temps.

Je suppose que le meilleur des deux mondes serait un programme qui additionne le temps nécessaire à un morceau de code, y compris TOUTES les fois où il a été exécuté (afin de déterminer ce qui ralentit le plus votre code dans l'ensemble). Existe-t-il une sorte d'outils pour cela?

sinθ
la source
Avez-vous une préférence pour le système d'exploitation ou le langage de programmation?
Mawg dit réintégrer Monica le

Réponses:

15

Ce que vous cherchez, c'est un profilage :

En génie logiciel, le profilage ("profilage de programme", "profilage de logiciel") est une forme d'analyse dynamique de programme qui mesure, par exemple, la complexité spatiale (mémoire) ou temporelle d'un programme, l'utilisation d'instructions particulières ou la fréquence et durée des appels de fonction. L'utilisation la plus courante des informations de profilage est d'aider à l'optimisation du programme.

Il existe plusieurs applications de ce type. Parfois, ceux-ci sont intégrés à l'IDE lui-même. L'idée de netbeans est un de ces outils avec un profileur intégré. entrez la description de l'image ici

Un autre outil de ce type est Visual vm .

entrez la description de l'image ici

Les profileurs peuvent travailler de différentes manières - et il faut être conscient des différences. Une approche consiste chaque seconde à prendre un instantané des threads en cours d'exécution et à voir quelles méthodes sont actuellement appelées pour chaque thread. Cela utilise un échantillon de ce qui existe.

L'autre approche consiste à instrumenter le bytecode java pour rapporter l'heure de début et de fin à une autre application.

Écrire un profileur n'est pas très difficile pour un Java qualifié. IBM a un article sur l'écriture de votre propre profileur (avec le code source!). Celui-ci est basé sur Java Interactive Profiler .

Il existe une multitude de profileurs - gratuits et commerciaux (que diriez-vous d'un profileur connecté à des instances JVM en cours d'exécution qui peuvent vous faire rapport (e-mail ou autre notification) lorsque des méthodes particulières dépassent le temps d'exécution attendu? Ou raccordé à un programme qui rend compte lorsque les demandes Web ont pris trop de temps - le profil historique de cette demande a-t-il été enregistré pour une inspection ultérieure?). Il vous suffit de savoir ce que vous cherchez pour commencer à les trouver et partir de là.

Une fois que vous avez le profileur, vous êtes en train d' interpréter les résultats du profilage .

Communauté
la source