Lors d’une mission récente, j’ai été amené à tester les performances d’une application sur Pocket PC développée en C# avec le .NET Compact Framework 2.0.

L’objectif était de mesurer des temps de réponses et de tester la consommation mémoire de l’application.

1-      Mesure de la consommation et visualisation des objets .NET aloués  

Afin de détecter d’éventuels problèmes de fuite mémoire et d’obtenir des données sur la taille des objets alloués pour l’application, j’ai utilisé l’outil .NET CF Remote Performance Monitor, livré avec le package .NET Compact Framework Power Toys 3.5 de Microsoft.Ces outils gratuits sont disponibles en téléchargement à l’adresse suivante :

   http://www.microsoft.com/downloads/details.aspx?familyid=C8174C14-A27D-4148-BF01-86C2E0953EAB&displaylang=en.

L’outil permet de démarrer l’application sur le Pocket PC depuis votre PC sous Windows et de remonter en temps réel les informations suivantes :

ü   La taille de la mémoire allouée pour l’application par la machine virtuelle

ü   Les objets désalloués par le Garbage Collector

ü   Le nombre d’appels natifs « interop » effectués

ü   Les collections génériques allouées

ü   Le nombre de classes chargées à un instant t

ü   Le nombre de méthodes appelées

ü   Le nombre d’exceptions managées relevées.

ü    

L’option GC Heap Viewer permet également d’obtenir une « photo » à un instant donné des objets .NET alloués par l’application, ainsi que leurs consommations en mémoire (estimés en bytes). Vous pouvez également sauvegarder vos relevés et l’outil permet de faire des comparaisons de nombre d’instances entre deux relevés.

L’outil est simple à prendre en main et peut rendre de très bons services...

2 – Tester les performances d’une méthode ou d’une portion de code

Il peut être nécessaire de marquer une ou plusieurs méthodes dans votre code afin de relever des temps en runtime. Ces temps peuvent être stockés dans un fichier sur le Pocket PC afin d’être exploiter ultérieurement.

Je joins à ce post une classe technique que j’ai utilisée à plusieurs reprises qui stocke des temps marqués dans un fichier xml par section.

public void EcritureFichier() {            BenchMark oBench = new BenchMark("Ecriture_Flash", "FCT_EcritureFichier");            oBench.Begin();            //ON MEMORISE LES INFORMATIONS FLASHE             StringBuilder MyStringBuilder = new StringBuilder();            MyStringBuilder.Append(tabReleve[compteurReleve - 1].CodeIlot.ToString());            MyStringBuilder.Append(";");            MyStringBuilder.Append(tabReleve[compteurReleve - 1].CodeArticle.ToString());                                        oBench.End(); } 

  

L’écriture des temps se fait en mémoire et la sauvegarde physique sur fichier est réalisée via la méthode : BenchMark.SaveBenchDocument(). (Cf. Fichier joint)

Laurent Nyffels 

BenchMark.cs (4,16 kb)