Je rencontre des problèmes de performance avec mon application Delphi 2006. Pouvez-vous suggérer des outils de profilage qui me aider à trouver la bouteille couOutils de profilage Delphi
-à-dire un outil comme turbo Profiler
Je rencontre des problèmes de performance avec mon application Delphi 2006. Pouvez-vous suggérer des outils de profilage qui me aider à trouver la bouteille couOutils de profilage Delphi
-à-dire un outil comme turbo Profiler
Je demande au même question pas trop longtemps
J'ai téléchargé et essayé AQtime. Il semble complet, mais ce n'est pas un outil facile à utiliser et est très cher pour un programmeur individuel (c'est-à-dire 600 $ US). J'ai adoré le fait qu'il était non invasif (n'a pas changé votre code), et qu'il pouvait faire du profilage ligne par ligne, jusqu'à ce que je trouve que parce qu'il s'agit d'un profileur d'instrumentation, cela peut conduire à des optimisations incorrectes comme dans: J'ai essayé une démo de ProDelphi, beaucoup moins chère (environ 80 $ je pense), mais c'était trop maladroit pour moi - je n'ai pas du tout aimé l'interface utilisateur, et c'est invasif - changer de code pour ajouter l'instrumentation, que vous devez faire attention.
J'ai utilisé GpProfile avec Delphi 4 pendant de nombreuses années. Je l'ai aimé. C'était aussi envahissant, mais ça a tellement bien marché que j'ai appris à lui faire confiance et cela ne m'a jamais posé de problème en 10 ans. Mais quand je suis passé à Delphi 2009, je ne pensais pas qu'il était préférable de l'utiliser, car il n'a pas été mis à jour et, de l'aveu même de GP, ne fonctionnera pas sans modifications. Je m'attends à ce que vous ne puissiez pas l'utiliser avec Delphi 2006.
ProDelphi et GpProfile ne font que profiler au niveau de la procédure. Si vous voulez faire des lignes individuelles (ce que j'ai parfois dû faire), vous devez appeler PROC1, PROC2, PROC3 pour chaque ligne et mettre une ligne dans chaque PROC. C'était un peu ennuyeux de devoir le faire, mais cela m'a donné de bons résultats (au moins, j'étais content des résultats de GpProfile). La réponse que j'ai acceptée dans ma question CharInSet disait que "Les profileurs d'échantillonnage, qui vérifient périodiquement l'emplacement du CPU, sont généralement meilleurs pour mesurer le temps de code." et plus tard answer a donné le profileur d'échantillonnage gratuit d'Eric Grange pour Delphi qui supporte maintenant Delphi 2009. Je ne l'ai pas encore essayé, mais j'ai entendu de bonnes choses à ce sujet, et c'est le prochain que je vais essayer. En passant, vous pouvez économiser 600 $ en n'achetant pas AQtime, et en utilisant plutôt cela pour mettre à jour votre Delphi 2006 vers Delphi 2009. La stabilité, la vitesse et les fonctionnalités supplémentaires (en particulier Unicode), vaudra la peine ton temps. Voir: What are major incentives to upgrade to D2009 (Unicode excluded)?
Aussi AQtime ne s'intègre pas dans Delphi 2009 pour le moment.
Un autre gratuit, avec la source que j'ai trouvé sur, mais je n'ai pas encore essayé est TProfiler. Si quelqu'un a essayé celui-là, j'aimerais savoir ce qu'ils en pensent.
Note: Le Addenum j'ajouté par la suite à question 291631 semble que ce peut être la réponse. Voir Andre's open source program: asmprofiler
fév 2010 suivi. J'ai mordu la balle et acheté AQTime. Il y a quelques mois, ils l'ont finalement intégré à Delphi 2009, ce que j'utilise (mais ils doivent encore faire Delphi 2010). Le visionnage des lignes sources et de leurs temps et comptes individuels est inestimable pour moi, et AQTime fait un excellent travail.
Je suis assez sûr que AQTime 6 s'intégrera avec Delphi 2009. – lukeck
À partir du 15 décembre 2008, ce n'est pas le cas. Lorsque je n'ai pas réussi à intégrer mon téléchargement d'essai, j'ai communiqué avec AutomatedQA, et ils m'ont dit qu'ils travaillaient encore à ce sujet. AQTime 6.10 ne fonctionnera qu'avec Delphi 2009 en tant que programme séparé. – lkessler
AQTime 6.30 a été publié en novembre 2009 et a finalement ajouté l'intégration dans Delphi 2009. Mais bien sûr, Delphi 2010 est déjà sorti, et non, AQTime n'a pas encore d'intégration avec cela. Peut-être une autre année attendra les gens de D2010. – lkessler
www.AutomatedQA.com a le meilleur choix pour le profilage Delphi (AQtime)
Sachez que l'AQA est basé sur l'instrumentation et non sur le profilage, et qu'il donnera donc des résultats trompeurs pour les goulots d'étranglement très fins. –
s/pas de profilage/pas d'échantillonnage/ –
Voici une autre choix, je n'ai pas utilisé celui-ci avant: http://www.prodelphi.de
choix final que je connais pour Delphi, http://gp.17slon.com/gpprofile/index.htm
Note finale, www.torry.net est une gre à la place pour la recherche de composant/outil Delphi
Darian, au lieu d'ajouter 4 réponses à une question, éditez votre première réponse pour fournir toutes les informations, et supprimez l'autre 3. –
J'ai utilisé http://www.prodelphi.de avec succès sur le projet Delphi 7 dans le passé. Pas cher et fonctionne. Ne laissez pas le site web de la ligue de la brousse vous effrayer.
J'utilise et recomande Sampling Profiler, je pense que vous pouvez l'obtenir à partir de Embarcadeiro.public, pièces jointes newsgroup.
Maintenant c'est sur http://delphitools.info/ –
Je viens de trouver une très belle sans sampling profiler et il prend en charge Delphi 2009
Fonctionne également avec delphi 7 - merci pour celui-ci. Notez, assurez-vous d'activer les informations de débogage TD32 dans les options de l'éditeur de liens. –
Je l'ai utilisé ProDelphi, la plupart du temps pour déterminer quelles routines mangent le plus de temps. C'est un Instrumenting Profiler, ce qui signifie qu'il ajoute un peu de code au début et à la fin de chaque routine. Vous contrôlez les routines qu'il profile par des directives dans les commentaires. Vous pouvez également profiler des sections d'une routine. Mais les sections doivent commencer et s'arrêter au même niveau de bloc, sans entrer ou sortir de la section. L'optimisation doit être désactivée là où ProDelphi insère son code (où vous placez les directives), mais vous pouvez l'activer ailleurs.
L'interface est un peu klunky, mais très rapide une fois que vous avez compris. Vous pouvez faire un travail utile avec la version gratuite (limitée à 10 routines ou sections). ProDelphi peut rapidement vous dire quelles routines vous devriez examiner. Mais pas pourquoi, ou quelles lignes. Récemment, j'ai commencé à utiliser VTune Performance Analyzer d'Intel. 'WOW' ne commence pas à le résumer. Je suis impressionné. Je n'avais tout simplement aucune idée de tout cela a été intégré dans les processeurs Intel modernes. Saviez-vous qu'il peut vous dire exactement combien de fois une seule instruction a dû attendre que le cache de données L1 regarde latéralement à un autre noyau avant de recharger un mot à partir d'un cache plus élevé? Si je continue à écrire, je vais juste sonner comme une publicité à bout de souffle pour le produit.
Accédez à Intel et téléchargez la démo chronométrée. Creusez autour du net et trouver quelques vidéos sur la façon de commencer. (Sinon, vous risquez d'être bloqué par toutes les options.) Cela fonctionne avec n'importe quel compilateur. Il suffit de pointer vers un fichier .exe. Il vous montrera les lignes de source si votre fichier .exe inclut des informations de débogage & vous le pointez vers le code source. J'ai été bloqué en essayant d'optimiser une boucle interne qui a appelé une fonction que j'ai écrite. Il n'y avait pas d'appels externes sauf la longueur (str). Cette boucle interne a couru des milliards de fois par course, et a mangé environ la moitié du temps CPU - un candidat parfait pour l'optimisation. J'ai essayé toutes sortes d'optimisations standard, avec peu ou pas d'effet. VTune montre des points chauds. Je viens juste de descendre jusqu'à ce qu'il me montre l'ASM généré par mon code, et combien de temps chaque instruction a pris.
Voici ce que VTune m'a dit:
- ligne nnnn [ligne de code delphi] ...
- addr hhhh cmp ptr octet [EDX + ecx], 0x14h - - - - - - - - 3 cycles
- addr hhhh ja label_x - - - - - - - - - - - - - - - - - - -10302 cycles
Les valeurs absolues ne signifient rien. (Je pense que je mesurais les cycles par instruction à la retraite.) Les valeurs relatives permettent de savoir où tout le temps s'est passé. La grande chose était la fenêtre de conseil. Il m'a dit que le code bloquait l'attente de chargement des données dans le cache de données L1, et m'a donné de bons conseils sur la façon d'éviter les décrochages. Mon erreur était de penser au Core2 Quad comme un processeur 8086 très rapide. Non^3. Le code passait 99% de son temps à attendre que les données soient chargées depuis la mémoire parce que je sautais trop. Mon algorithme supposait que la mémoire était RAM (Random Access). Ce n'est pas comme ça que fonctionnent les processeurs modernes. Les données dans le cache L1 peuvent être accédées en 1 ou 2 cycles, mais l'accès au cache L2 ou L3 coûte des dizaines à des centaines de cycles, et aller en RAM coûte des milliers. Cependant,, toute cette latence est évitée lorsque vous accédez à vos données de manière séquentielle - car le processeur va précharger le cache avec les données suivant le premier octet que vous demandez.
Le résultat net est que j'ai réécrit l'algorithme pour accéder aux données plus séquentiellement, et j'ai obtenu une accélération de 10x, ce qui était assez bon. Quand j'ai le temps, je suis certain que je peux en sortir 10x supplémentaires. Mais c'est juste le Geek en moi. Bon Assez, c'est assez bien.
Je savais déjà que vous obteniez le meilleur en optimisant votre algorithme, pas votre code. Je pensais que j'avais seulement besoin du profiler pour me dire ce qu'il fallait optimiser. Mais j'avais aussi besoin de trouver la raison du goulot d'étranglement pour pouvoir concevoir un algorithme plus rapide.
Le nouvel algorithme n'est pas radicalement différent de l'ancien. Il stocke simplement les données de sorte qu'il peut être accédé séquentiellement. Par exemple, à un endroit, j'ai déplacé un champ d'un tableau d'enregistrements dans son propre tableau d'entiers - parce que la boucle interne n'avait pas besoin du reste des données dans chaque enregistrement. J'ai également eu une matrice rectangulaire stockée comme un tableau dynamique de tableaux dynamiques. Le code l'utilisait pour accéder aléatoirement à des mégaoctets de données (et le pauvre cache de données L1 ne mesurait que 64 Ko). J'ai trouvé comment le stocker dans un tableau linéaire en diagonale de la matrice, qui est l'ordre dans lequel j'utilise les données. (OK, peut-être que la partie est radical.)
En tout cas, je suis vendu sur VTune.
http://www.prodelphi.de/ – Ampere
Ceci est un logiciel gratuit et facile à utiliser (comparé à ProDelphi). delphitools.info/downloads/samplingprofiler-changelog – Ampere