Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Azra [Florent Santin]

.Net, X'Net, aucun lien de parenté V2.0

Actualités


  • MSN Alerts
    View Florent Santin's profile on LinkedIn
[VS 2008] Profiling: Trouver rapidement un goulet d'étranglement dans votre code

Depuis sa version 2005, Visual studio Team System - Development est doté d'un profiler de code permettant d'analyser dynamiquement les performances: J'exécute mon programme, celui-ci est surveillé puis, lorsqu’il se termine, un rapport met en avant plein de métriques intéressantes parmi lesquelles:

  • Les fonctions ayant pris le plus de temps en termes d'exécution (en secondes ou %)
  • Les fonctions les plus souvent appelées (en secondes ou %)
  • Les fonctions ayant consommées le plus de mémoire, n'ayant pas été garbage collectée...
  • ...

Prenons un exemple simple contenant un célèbre problème de performance: un bout de code avec une grosse concaténation composée de "string = string + string"

namespace TestProfiling
{
   class Program
   {
     static void Main(string[] args)
     {
       TestConcat c = new TestConcat();
       c.AddStringToRes("Coucou", 10000);
       string aff = c.Res;
       Console.WriteLine(aff);
     }
   }

   public class TestConcat
   {
     private string _res;
     public string Res
     {
       get { return _res; }
     }

     public TestConcat()
     {
       _res = string.Empty;
     }

     public void AddStringToRes(string s, int occurences)
     {
       for (int i = 0; i < occurences; i++)
       {
         _res += s.ToString();
       }
     }
   }
}

Depuis Visual Studio, il est possible d’analyser le comportement de cette application console. Pour ceci, il suffit de naviguer dans le menu, de sélectionner la catégorie « Analyse » (en RC1, « Developer en beta 2) puis de chosir l’option « Lauch Performance Wizard » pour se faire guider.

profiler1
profiler2

En suivant les différentes étapes de l’assistant, on obtient rapidement la fenêtre suivante dédiée à l’exécution de séances de profiling et à la gestion des rapports.

 profiler3


En cliquant sur le bouton « Launch », l’application console démarre, et, une fois son exécution terminée, les informations collectées sont rassemblées dans un rapport qu’il ne reste plus qu’à consulter.

 profiler4

Le rapport est composé de plusieurs onglets d'onglets : « Summary » (le résumé général), « Call Tree » (vu ci-dessous, « Modules » (les DLL les plus couteuses), « Caller / Callee » (analyser l’évolution de la stack après coup), « Functions » (toutes les fonctions appelées), « Marks » (détaillé plus tard) et « Process » (pour les applications multithreadées).

Parmi ces onglets, celui intitulé "Call Tree" permet de mettre en avant les différents appels de méthode ayant été effectués en mettant en avant leur temps d'exécution de deux façons:

  • Inclusive Time: le temps en millisecondes d'exécution de la méthode et de ses méthodes enfants (les sous appels)
  • Exclusive Time: le temps en millisecondes d'exécution de la méthode en ignorant ses enfants (le temps réellement gaspillé donc)

profiler6

Lorsque l'on cherche a optimiser du code, il est donc important de repérer les méthodes ayant un "Inclusive" mais surtout un "Exclusive Time" élevé. La tâche était rendu possible dans VS 2005 Team Dev, il suffisait de parcourir l'arbre des appels jusqu'à mettre en avant le problème, mais dans VS 2008, un petite icone supplémentaire nommé  "Expand HotPath" propose de faire directement le travail de mise en avant:

profiler7

Encore une petite astuce pour gagner du temps dans l’utilisation de ces outils déjà très complets. Bonne optimisation!

Posted: lundi 22 octobre 2007 09:30 par azra
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

cyril a dit :

Sympathique ca :)

# octobre 22, 2007 11:37
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Comment exporter tous les comptes Azure Active Directory ayant une license via PowerShell par Blog Technique de Romelard Fabrice le 05-17-2018, 13:46

- PowerShell: Comment avoir le Country Name depuis un Country Code par Blog Technique de Romelard Fabrice le 05-17-2018, 13:20

- Office 365: Comment supprimer un compte externe d’un site SharePoint Online en mode Extranet par Blog Technique de Romelard Fabrice le 05-11-2018, 17:00

- Office 365: Comment reconfigurer le lien “Bloc-notes” d’un teamsite par Blog Technique de Romelard Fabrice le 05-09-2018, 16:45

- Office 365: Utiliser l’option “Alert Me” de la page de résultat de recherche par Blog Technique de Romelard Fabrice le 05-09-2018, 14:57

- Office 365: Comment télécharger l’image de profil de Delve par Blog Technique de Romelard Fabrice le 05-09-2018, 14:28

- Office 365: Valeur “Country or Region” et “User Location” dans Azure AD par Blog Technique de Romelard Fabrice le 05-04-2018, 12:08

- Office 365: Menu d’administration non visible dans une page SharePoint par Blog Technique de Romelard Fabrice le 05-04-2018, 11:50

- Office 365: Comment avoir un minimum de statistiques d’usage de votre site SharePoint Online par Blog Technique de Romelard Fabrice le 05-04-2018, 11:41

- Office 365: Reconfigure la gestion des demande d’accès dans SharePoint par Blog Technique de Romelard Fabrice le 05-04-2018, 10:41