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
    MS Days - MSDN et TechNet Tour spécial Dev
[VS 2008] Profiling: Comparaison de deux rapports

Comme évoqué dans mon précédant message, depuis VS 2005, il est possible de créer des rapports de performance dans la version Team System - Development.

Ces rapports sont très pratiques pour mettre en avant les problèmes de performances, mais lorsque un de ceux-ci est identifié et corrigé, il faut être capable de valider concrètement mais surtout rapidement le gain réél sur l'éxécution de l'application.

Pour ceci, une fois le code patché, il est donc nécessaire de régénérer un rapport dans les mêmes conditions pour pouvoir analyser l’évolution des performances.

Dans la version 2005, une fois les rapports avant / après générés, il était nécessaire de parcourir chacun d'entre eux en parrallèle afin de mettre en avant les différentes métriques ayant évolués: déjà intéressants mais pas très pratique pour ce qui est de la rapidité de détection des différences.

Dans la version 2008, une nouveauté très intéressante de la version Team Developer est qu'elle propose directement un outil de comparaison de rapports!

Par exemple, prenons toujours le cas de la concaténation de string en générant deux rapports comme expliqué dans mon précédant post.

Générons un premier rapport pour ce code-ci, contenant des concaténations classiques:

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();
    }
  }
}

Modifions ensuite ce code en utilisant un StringBuilder, puis générons un nouveau rapport : 

public class TestConcat
{
  private StringBuilder _res;
  public string Res
  {
    get { return _res.ToString(); }
  }

  public TestConcat()
  {
    _res = new StringBuilder();
  }

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

Puis comparons les deux rapports avec l'outil:

  • Soit directement depuis la fenêtre « performance explorer » contenant la liste des rapports, en en sélectionnant deux puis en choisissant l’option « Compare Performance Reports » du menu contextuel :

profilerb

  • Soit en utilisant le menu « Analyse » et son option « Compare Performances Reports » pour aller selectionner deux fichiers de rapport à comparer:

profilerC  profilerD

Et voila le résultat qui met bel et bien en avant, de manière très visuelle avec des codes de couleur, le fait que le StringBuilder est beaucoup plus performant en temps d'exécution.

profilerA

Il est possible d'utiliser comme indice de comparaison n'importe quelle métrique proposée par l'outil de profiling, dans cet exemple, j'ai fait le choix de mettre en avant le temps total passé dans l'appel d'une fonction afin de mettre en avant le fait que, avec la concaténation classique, celle-ci dure 81,69 ms tandis qu'avec le stringBuilder 2,12 ms, soit un gain de temps (delta) de 79,57 ms!

Bonnes séances d'optimisation!

Posted: mardi 23 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

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le il y a 5 heures et 9 minutes

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le il y a 12 heures et 36 minutes

- Hello CS par Le Blog de julz le il y a 18 heures et 2 minutes

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le il y a 20 heures et 52 minutes

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52

- Monitoring et Patron de méthode par Le blog de Marc Ranchin le 10-08-2008, 10:22