Feed on
Posts
Comments
Article en preparation:

surprise...

(x%)

Recemment j’ai re-ecrit ma simulation de marche en C++. Avec mon partenaire, on avait commence avec une version C# pour developper un prototype rapidement et pouvoir demarcher les clients, mais lorsque les besoins en performance (ainsi que le control de celle-ci) se sont fait sentir, il a bien fallu faire la conversion en C++.

Fort heureusement, mes librairies personnelles m’ont permit de ne pas perdre de temps sur l’aspect technique (je pense notamment a mes librairies reseaux en IOCompletion) et la conversion fut relativement rapide, mais ce qui est interessant dans cette histoire est le resultat des tests avant/apres car j’avais pas mal sous-estime la chose.

Notre simulation de marche tourne actuellement on-demand sur un cloud (RackSpace pour les curieux) . On a pas mal d’instance est dynamique (elles sont pour la plupart temporaire, le temps d’une partie lancee par un joueur), mais aussi des instances dites statiques ou une entreprise loue notre simulation de marche pour y simuler plusieurs actions et mouvement de prix ou participer a nos concours de trading.

Bref, y’a pas mal de choses qui peuvent se passer sur notre cloud et comme on paye en fonction de sa puissance en terme de CPU et de memoire, il fait bon de mesurer ce qui s’y passe et reduire les couts.

On a depuis le debut un test de performance plutot basic, mais qui refete bien les activites principales sur la simulation. D’abord il se connecte, demande la liste des actions et cote l’offre et la demande pour chacune des actions. Lorsque la cote est placee pour chaque action le test s’arrete et affiche le resultat.

Pour 5000 actions cotees a la bourse:

C# a prit 8 secondes et 105 meg de memoire.

C++ prend 140 milliseconds et 4.7 meg de memoire.

Pour 100.000 actions cotees a la bourse:

C# a prit 168.5 secondes et 1.119 gig de memoire.

C++ prend 13.5 seconds et 52 meg de memoire.

Je n’ai malheureusement pas fait de mesure CPU, mais vue le facteur pour la vitesse, les requetes peuvent etre sequentielles en C++ que C# serait toujours plus lent.

Pour la memoire c’est un peu different, je me doutais que C# etait assez mauvais dans ce domaine et oui on me dira que le gc (garbage collector) va se lancer, mais bon 1.1 giga, personne veut ca (surtout pas sur un cloud!) et s’il se lance ca impacte les performances encore plus.

Conclusion: tester, tester, tester :)

One Response to “C# est encore loin de pouvoir planner sur les nuages”

  1. on 10 Oct 2011 at 9:45 Luk

    Wow heu… Je ne veux absolument pas remettre en cause vos compétences en c# (surtout qu’à ce que j’ai vu ici avant, je pense que tu es meilleur que moi 😉 ), mais autant un rapport de 10-20% ne m’aurais pas fortement étonné, autant un rapport de 10 me parrait énorme !!!

    Il y a peut être des optimisations que vous faites inconsciemment en C++ et que vous ne faisiez pas en C#.

    Après, ça montre aussi qu’il y a des langages sur lesquels on est plus à l’aise que d’autres :). Mais je ne jetterais pas forcément à la poubelle C# si vite :)

Trackback URI | Comments RSS

Laissez un message