IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mono .NET Discussion :

Problème benchmark Microsoft .NET / Mono, et C#


Sujet :

Mono .NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Problème benchmark Microsoft .NET / Mono, et C#
    Bonjour,

    J'ai un projet tuteuré à présenter pour mon DUT, qui a pour sujet la plateforme .NET de Microsoft. Je dois faire une partie benchmark, où je dois comparer les temps d'exécution d'un programme exécuté par la plateforme .NET de Microsoft, et un programme exécuté par Mono (sur Windows également). Le problème c'est qu'apparemment, le C/C++ n'a pas été vraiment traité jusque là dans Mono, et on se sert surtout du C#, or je n'en ai jamais fait.
    J'aimerais créer un programme qui, par exemple, remplit un tableau avec des valeurs aléatoires, plusieurs milliers fois, et retourne son temps d'exécution avant de se terminer. J'ai pensé utiliser les 'ticks' pour trouver le temps d'exécution, mais bon, je ne sais pas du tout comment faire en C#...
    Et si j'ai bien compris, les programmes que je compile avec Visual Studio 2005 sont des programmes exécutables uniquement si on possède le framework de .NET ?
    Une autre question, comment utiliser la machine virtuelle de .NET ? Ca se fait automatiquement quand on lance un programme compilé avec Studio .NET ?
    Je déplore le fait qu'on ne puisse pas vraiment trouver d'information vraiment concrète concernant la plateforme .NET de Microsoft (même sur le site de Microsoft lui-même), tout reste extrêmement abstrait et flou...

    Merci pour vos réponses.

  2. #2
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    La plate-forme .NET n'est pas floue, ni les informations qu'on trouve dessus, c'est seulement qu'il s'agit d'un environnement professionnel particulièrement riche et qu'en effet il est très difficile de "tout comprendre" en cinq minutes en surfant "en touriste" sur Internet (c'est pas péjoratif hein).

    Donc en gros pour débrouissailler en coupes très larges :

    .net est un environnement d'exécution, un runtime. Il se place au dessus de Win32 pour l'instant, un jour le remplacera-t-il totalement mais c'est pas tout de suite.
    C'est un ensemble de dll écrites en C#, donc en code managé. Il existe un runtime simple à installer d'une 20aine de méga. L'environnement de développement, le SDK, est lui aussi gratuit (mais plutôt 200 Mo) et contient le compilateur C# en ligne de commande. Donc avec le bloc-note tu peux programmer tes benchs en mode console (ce qui suffira certainement). Sinon tu peux télécharger C# Express, gratuit aussi, chez MS.

    Il n'y a pas de machine virtuelle sous C#, c'est une approximation grossière qui est faite par plein de gens en référence à la VM de java, mais ça n'a rien à voir. Java est interprété, donc exécuté par une VM (même s'il existe des compilos java de nos jours).
    Les langages .NET produisent du IL (code dans un Langage Intermédiaire, sorte d'assembleur de .NET).
    Ce code est stocké dans l'EXE ou la DLL.
    A l'exécution, .NET vérifie s'il possède ou non une copie compilée native dans son cache local. Si oui, c'est l'exe compilé natif qui est exécuté. Sinon, .NET compile les classes et stocke le résultat dans son cache, puis exécute l'appli.
    Donc pour tes benchs : faire attention à la première exécution d'un exe ou dll qui est toujours un poil plus long en raison de la compilation native.

    Quant aux applis à faire en C#, il va te falloir apprendre le langage :-)
    C'est pas dur, surtout si tu connais C++, c'est pareil mais en plus logique et sans les trucs prises de têtes et ambigus de c++ ...

    Un petit exemple pour te faire voir :
    int[] tableau = new int[50]; // créer un tableau de 51 integer
    for (int i=0;i<51;i++) tableau[i] = i; // rempli le tableau

    Te voilà sur la route,
    Bon voyage !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour la réponse. J'ai encore quelques questions...
    "A l'exécution, .NET vérifie s'il possède ou non une copie compilée native dans son cache local. Si oui, c'est l'exe compilé natif qui est exécuté. Sinon, .NET compile les classes et stocke le résultat dans son cache, puis exécute l'appli."
    Ce cache local... ça doit prendre pas mal de mémoire de copier tous les programmes dans un cache non ? Et, en gros, ce n'est jamais le code IL qui est exécuté, mais il est toujours compilé en code natif (machine) avant d'être exécuté ?

    "Donc pour tes benchs : faire attention à la première exécution d'un exe ou dll qui est toujours un poil plus long en raison de la compilation native."
    En gros, je devrai le lancer une fois, pour qu'il soit compilé en code natif, et je pourrai commencer les tests au bout de la deuxième fois ? Mais, je me pose une question, puisque l'exe devient un exe "banal"... c'est toujours pertinent d'effectuer un benchmark ?

    Puis, je ne sais pas si tu connais bien Mono, mais quand on compile un programme (à partir de son code source en .cs par exemple), cela crée un .exe, qu'on peut exécuter aussi bien en double cliquant dessus dans l'explorateur Windows (il est automatiquement reconnu comme programme .NET ? Et qui l'exécute ? La plateforme de Microsoft ou Mono ?), qu'en tapant en ligne de commande "mono programme.exe", et dans ce cas, que se passe t-il ? Quelle différence y'a t-il ? Est-ce que cette fois, ça utiliserait une machine virtuelle ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/04/2012, 11h36
  2. Problème avec Microsoft .Net Framework
    Par jokom dans le forum Framework .NET
    Réponses: 2
    Dernier message: 24/08/2009, 22h39
  3. Dossier Microsoft.net
    Par wareq dans le forum Windows XP
    Réponses: 10
    Dernier message: 10/01/2006, 14h11
  4. Problème avec Microsoft Jet
    Par LLaurent dans le forum XMLRAD
    Réponses: 2
    Dernier message: 12/10/2003, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo