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

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 6 heures et 49 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59