2009-07-28 7 views
0

J'essaie de profiler les performances de mon code Flex, mais je n'obtiens pas les résultats attendus: l'horloge murale indique que mon application prend environ 30 secondes pour charger, mais quand je trie les résultats de profilage * par le temps cumulé, les chiffres ne concordent pas: il y a une méthode, [enterFrameEvent], qui a un temps cumulatif de ~ 8000ms, puis un tas de méthodes avec un temps cumulatif insignifiante: screenshot of profiling output http://img.skitch.com/20090728-j1rpxigiceutjw955j35sm74ag.jpgFlex profiler ne me montre pas ce que je m'attends ... Est-ce que je me trompe?

Mais même résumant le cumulé timesª laisse ~ 15 secondes non comptabilisées. Où est passée cette période? Y a-t-il quelque chose que je fais de travers?

Pour un peu plus d'arrière-plan sur mon application: le temps de chargement est un résultat direct de données reçues à partir d'un service HTTP. Une demande de données est effectuée dans le gestionnaire creationComplete de Application (la ligne sélectionnée) et lorsque les données arrivent du serveur et sont traitées récursivement. Les méthodes qui effectuent le traitement (y compris le gestionnaire de résultat) apparaissent dans la liste des méthodes du profileur, mais elles ont un temps d'exécution insignifiant (~ 30ms). *: Je profile en cliquant sur le petit bouton "Profile" dans FlexBuilder, en laissant l'application démarrer, puis en cliquant sur le bouton "performance snapshot". J'ai également essayé d'envoyer les requêtes en réponse à un clic sur un bouton: démarrer l'application en utilisant le profileur, cliquer sur le bouton "performance snapshot", cliquer sur le bouton (pour demander les données), attendre ~ 30 secondes pendant le traitement des données , puis en cliquant à nouveau sur "Performance Snapshot". Les résultats étaient similaires.

Modifier: Plus d'informations: quand je dis "chargement" je veux dire "mon navigateur est verrouillé et ne répond à rien jusqu'à ce que ce soit fait". En outre, l'exécution d'un profil de mémoire n'affiche rien de trop inattendu (il y a un pic au démarrage de l'application, mais aucune allocation significative après cela). : Un débogage de printf m'a montré que, en fait, ce ne sont pas mes gestionnaires de résultats qui prennent tout le temps - c'est autre chose qui s'exécute après qu'ils ont fini. ª: oui, je réalise que c'est une mesure totalement absurde ... Mais j'essaie de faire valoir un point.

PS: Désolé pour le terrible JPGification ... Skitch ne fait pas PNGs: '(

Répondre

0

Profiler ne considère pas asynchrone temps d'appel HTTPService parce qu'il n'y a pas de code en cours d'exécution pendant ce temps le moteur d'exécution. est en attente juste pour la réponse HTTP.

Utilisez un plugin HTTP tracer comme Fiddler ou HTTPWatch pour mesurer le temps pris par les appels HTTP. Ensuite, les temps devraient ajouter.

+0

Désolé, je suppose que je n'étais pas clair: le temps est passé à traiter les données que mon application Flex reçoit du service HTTP - n'attendant pas que le service renvoie les données. –

1

Bon, le problème est résolu.

Il tourne o Cependant, la définition du champ text de mx: Label nécessite Ω (n²) time (où 'n' correspond à la longueur de la chaîne). Il y a quelques optimisations qui le rendent plus rapide pour des chaînes "suffisamment courtes", mais étant donné une chaîne qui est "suffisamment longue", vous pouvez faire tout ce merveilleux travail.Inutile de dire que mes cordes étaient «suffisamment longues».

Sucrée.

Questions connexes