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: Nettoyage des versions de List Item avant migration depuis SharePoint On Premise vers SharePoint Online par Blog Technique de Romelard Fabrice le 08-08-2017, 15:36

- Office 365: Comment supprimer des éléments de liste SharePoint Online via PowerShell par Blog Technique de Romelard Fabrice le 07-26-2017, 17:09

- Nouveau blog http://bugshunter.net par Blog de Jérémy Jeanson le 07-01-2017, 16:56

- Office 365: Script PowerShell pour assigner des droits Full Control à un groupe défini par Blog Technique de Romelard Fabrice le 04-30-2017, 09:22

- SharePoint 20XX: Script PowerShell pour exporter en CSV toutes les listes d’une ferme pour auditer le contenu avant migration par Blog Technique de Romelard Fabrice le 03-28-2017, 17:53

- Les pièges de l’installation de Visual Studio 2017 par Blog de Jérémy Jeanson le 03-24-2017, 13:05

- UWP or not UWP sur Visual Studio 2015 ? par Blog de Jérémy Jeanson le 03-08-2017, 19:12

- Désinstallation de .net Core RC1 Update 1 ou SDK de Core 1 Preview 2 par Blog de Jérémy Jeanson le 03-07-2017, 19:29

- Office 365: Ajouter un utilisateur ou groupe dans la liste des Site collection Administrator d’un site SharePoint Online via PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-24-2017, 18:52

- Office 365: Comment créer une document library qui utilise les ContentTypeHub avec PowerShell et CSOM par Blog Technique de Romelard Fabrice le 02-22-2017, 17:06