Blog du Pôle .NET

Partager pour mieux développer...

Comment « BenchMarker » une application développée avec le .NET Compact Framework ?

clock November 10, 2008 17:01 by author lnyffels

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)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Des classes utiles pour vos développements avec .NET Compact Framework

clock June 29, 2008 16:22 by author lnyffels

Il n’est pas rare lorsque l’on développe une application sur Pocket PC ou Smartphone avec le .NET Compact Framework d’avoir besoin de faire appel à l’API de Windows CE  pour réaliser certaines tâches. En effet, certaines méthodes ne sont pas encapsulées au sein du Compact Framework  :

-          Connecter le modem GPRS du mobile pour initier une communication

-          Modifier l’horloge interne du PDA pour la synchroniser avec celle du serveur

-          Récupérer l’identifiant unique du PDA (le Device ID)

-          Indiquer l’état de la batterie et la mémoire restante (Présent dans le NET CF 3.5)  

-          Lancer, supprimer ou lister des processus (Présent dans le NET CF 3.5)

Je joins à ce post un ensemble de classes utilitaires que j’ai eu l’occasion d’utiliser au cours de développements sur des plateformes Windows CE et qui je l’espère vous serons utiles.

Laurent Nyffels

ClassesUtiles.zip (6,45 kb)

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Créer une classe AppSettings sur le .NET CF 3.5 avec Linq to XML

clock June 26, 2008 10:11 by author lnyffels

Il y a quelques années j’ai écrit un article sur « codeppc », un site dédié au développement sur plate-forme WinCE. A l’époque, je déplorai l’absence de l’assembly System.Configuration et du fichier de configuration App.config sur le .NET Compact Framework 1.0.

Force est de constater que 6 ans après sa sortie, le Compact Framework 3.5 n’apporte toujours pas cette fonctionnalité pourtant bien pratique qui consiste à pouvoir externaliser des variables dans un fichier XML et de pouvoir les récupérer simplement dans une application sur Pocket PC ou smartphone simplement via une classe technique .NET. Heureusement, il en fournit bien d’autres…

Le Compact Framework de l’époque offrait toutefois la possibilité de manipuler une source XML à travers l’assembly System.Xml et nous pouvions assez facilement recréer une classe technique pour manipuler un fichier de type App.Config   (cf. http://www.codeppc.com/articles/sde2/sde2.htm ).

Aujourd’hui, le .NET CF 3.5 permet d’utiliser la technologie  Linq to Object et Linq to XML pour construire, lire et modifier une source XML.

Je me suis donc amusé avec les classes XDocument et XElement de Linq to Xml pour simuler le comportement  de la classe ConfigurationSettings du framework .NET et de la propriété AppSettings.   

Pour se faire, je propose d’externaliser cette classe dans une assembly ConfigurationManager.dll en créant un projet SmartDevice de type Class Library dans Visual Studio 2008.

Créons au sein de cette classe une propriété statique permettant de récupérer le chemin de l’app.config déployer sur le PPC.

 

 

Remarquer l’utilisation de la « réflexion » pour récupérer le répertoire de l’assembly en cours d’éxécution. Bon OK, la lignede code est un peu longue… mais bon, elle est fun, non ? Nous allons ensuite créer une méthode statique AppSettings permettant de récupérer la valeur de l’attribut value de l’élément <add> en passant le nom de la clé (attribut key) en paramètre  de la méthode 

<?xml version="1.0" encoding="utf-8" ?><configuration>  <appSettings>    <add key="dossier_exercices" value="C:\exo\questions"/>    <add key="dossier_corrections" value="C:\exo\corrections"/>  </appSettings></configuration>

La première étape consiste à charger le fichier App.Config avec la classe XDocument. Ensuite, on applique une simple requête Linq pour récupérer l’ensemble des éléments <add> comportant la clé choisie. Il suffit ensuite de récupérer l’attribut value qui est le dernier de l’élement add à travers un foreach.

 

Ajouter à cela quelques vérifications d’usages des valeurs passées en paramètre et un try – catch pour générer les éventuelles erreurs et le tour est joué ! Exemple de l’appel à la méthode au sein de l’application est le suivant :

String valeur = ConfigurationSettings.AppSettings("dossier_exercices")

Pour obtenir plus d’informations sur Linq je vous engage à parcourir le site msdn sur le sujet et à suivre le maître inconstesté : Anders Hejlsberg.

http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

Laurent Nyffels

SmartTestLinqXML.zip (49,81 kb)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5