Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

WCF - GZip à la rescousse des performances ? Suite des comparaisons de Bindings WCF

Suite à mes précédents tests sur les performances des bindings WCF, je me suis rappelé la possibilité d'activer GZip pour certains bindings.

Avant tout, revenons rapidement sur ce qu'est un binding WCF.

Les bindings sont les éléments clés de WCF, il s'agit d'un composant permettant de spécifier comment les messages sont transférés entre le client et le serveur, c'est ici qu'est spécifié le mode de transport, l'encodage, la sécurité, etc ... Un binding est donc composé de plusieurs éléments qu'on appelle BindingElement

image

Pour qu'un binding soit fonctionnel, il faut au minimum spécifier un BindingElement de type Transport et un de type Encoder. Par défaut WCF fournit 3 encoder différents : Text, Binary et Mtom.

image

Bien sur on peut créer nos propres BindingElement. C'est ce qu'a fait Microsoft dans les exemples du SDK windows, en effet dans le dossier %SDKPath%\Samples\WCFSamples.zip\TechnologySamples\Extensibility\MessageEncoder\Compression se trouve un projet nommé GZipEncoder. Ce projet fournit un BindingElement de type Encoder qui permet de GZipper les messages. Vous pouvez télécharger le windows SDK ici ou ici pour télécharger seulement les exemples WCF (très intéressant !)

Pour utiliser ce BindingElement, il faut d'abord l'enregistrer dans le fichier de config. Puis créer un CustomBinding dans lequel on place les BindingElements souhaités.

<extensions> <bindingElementExtensions> <add name="GZipMessageEncoding" type="Microsoft.ServiceModel.Samples.GZipMessageEncodingElement, GZipEncoder" /> </bindingElementExtensions> </extensions>

<binding name="customTcpBinaryGzip"> <GZipMessageEncoding /> <tcpTransport /> </binding>

Le GZipEncoder ne fait qu'encapsuler un Encoder existant, il est possible de spécifier quel encoder sous-jacent sera utilisé. Par défaut il s'agit du BinaryMessageEncoding mais on peut également spécifier le TextMessageEncoding.

<binding name="customNetTcpTextGZip"> <GZipMessageEncoding innerMessageEncoding="textMessageEncoding" /> <tcpTransport /> </binding>

Un article très complet est consacré à ce projet sur msdn : Custom Message Encoder: Compression Encoder

Nieau perf ?

J'ai procédé exactement au même test que précédemment, j'ai rajouté différentes méthodes, les méthodes en GetDS* retournent non pas une List<Person> mais un DataSet qui contient les mêmes informations.

Voici les résultats :

image

Une fois de plus, pas facile de commenter ces chiffres. Voici quelques conclusions :

  • Compression Gzip Vs non GZip :
    • Petits objets : La méthode Add net fait que transférer 3 entiers, on voit pour cette méthode qu'activer le GZip pour si peu de données n'est pas utile, cela ralentit et fait grossir les échanges par rapport à la version non Gzippé
    • Moyens et Gros objets :
      • La compression GZip fait généralement baisser la consommation réseau. A noter que le NetTcpNoSecu est plus efficace (conso réseau équivalente mais temps divisé par 2) que la version GZip lorsque l'on transfère une liste générique.
    • Text+Gzip Vs Binary+Gzip
      • La compression GZip réduit la consommation réseau du BinaryEncoder et TextEncoder au même niveau. Pour la durée, le Binary+GZip est à chaque fois plus rapide, mais la différence est faible et dépend du type d'objet transféré.
    • D'une manière général, l'utilisation GZip est un peu plus longue que son équivalent non GZip, si vous avez un réseau rapide est des petits ou moyens objets, mettre en place du GZip n'améliorera pas forcément vos performances, au contraire !
  • DataSet Vs List générique :
    • Si l'on n' utilise pas le GZip, le DataSet est plus couteux, aussi bien en temps qu'en consommation réseau.
    • Si l'on utilise le GZip, le DataSet reste plus couteux en temps (+50%) mais n'a aucune incidence au niveau consommation réseau.

Bien sur, on pourrait tirer pleins de conclusions hâtives à partir de ces données !
Il ne faut pas oublier que ces données ont été obtenus dans un contexte précis : un seul client non multi-threadé, pas de sécurité. Ces données permettent juste de données la couleur on ne peut pas généraliser. En effectuant mes tests (environ 3h pour tout jouer), je voyais nettement la différence entre les bindings via la consommation CPU du serveur, donnée qui n'est pas incluse ici.

D'autres commentaires sur ces données ?
J'aimerais faire des tests pour mesurer la conso CPU du serveur, connaissez-vous une solution me permettant de calculer le nombre d'unité CPU utilisé ? Je n'ai réussit à récupérer que la moyenne de consommation du CPU ce que je trouve pas très fiable, d'autres idées ?

Posted: samedi 4 octobre 2008 15:17 par cyril
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

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40

- [IIS] Erreurs web personnalisées par Blog de Jérémy Jeanson le 11-19-2014, 00:00

- BDD/TDD + Javascript par Fathi Bellahcene le 11-16-2014, 16:57

- Sécuriser sans stocker de mots de passe par Blog de Jérémy Jeanson le 11-15-2014, 08:58

- Où télécharger la preview de Visual Studio 2015 ? par Blog de Jérémy Jeanson le 11-13-2014, 21:33

- Les cartes sont partout ! par Le blog de Patrick [MVP Office 365] le 11-13-2014, 17:26

- [ #Office365 ] Courrier basse priorité ! par Le blog de Patrick [MVP Office 365] le 11-12-2014, 08:56

- [Oracle] Fichier oranfsodm12.dll absent du package client par Blog de Jérémy Jeanson le 11-10-2014, 20:44

- [ #Office365 ] Le chapitre 1 des Groupes est écrit, et alors ? par Le blog de Patrick [MVP Office 365] le 11-10-2014, 20:23

- SharePoint 2007: Script PowerShell pour ajouter un admin à plusieurs collections de sites par Blog Technique de Romelard Fabrice le 11-07-2014, 11:24