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

C# Discussion :

Performance du C# / temps d'execution


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut Performance du C# / temps d'execution
    Bonjour,

    je vais avoir pour objectif prochainement de rendre plus performant du code (du moins, réduire le temps d'exécution d'un programme en C#) et je fais des recherches.

    J'apprends pas mal de chose sur ce langage, et je souhaiterais savoir par exemple ;

    - Si la définition d'une méthode Méthode() (ayant le même nom), dans plusieurs classes différentes, nécessite un "virtual" pour la première et "override" pour les autres, pour optimiser le code (faciliter l'exécution et donc en réduire le temps).

    - Si il existe aussi une manipulation pour écrire le temps d'exécution (du programme bien sure) en terme de milliseconde en C# sur console ou sur un fichier de logging par exemple.
    Edit => j'ai trouvé ça pour le temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Stopwatch stopw = new Stopwatch(); 
    //Démarrage du chrono 
    stopw.Start(); 
     
    /* Le code dont on veut mesurer le temps d'exécution. 
     * Cela peut être du code brut ou des appels de méthodes... */ 
     
    //Arrêt du chorno 
    stopw.Stop(); 
    //On récupère la durée écoulé, en millisecondes 
    long milliseconds = stopw.ElapsedMilliseconds; 
    //ou encore, dans un format TimeSpan 
    TimeSpan ts = stopw.Elapsed;
    Merci d'avance.

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Si il existe aussi une manipulation pour écrire le temps d'exécution (du programme bien sure) en terme de milliseconde en C# sur console ou sur un fichier de logging par exemple.
    Tu peux utiliser un profiler, par exemple DotTrace. Il y en a d'autres que tu trouvera grace à google.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Merci

    Pour le moment comme dis plus haut (avec un Edit)
    j'ai trouvé StopWatch pour le temps, j'ai donc fais une batterie de test, et étrangement lorsque que j'utilise :

    public virtual void MaMethode() pour une première méthode.
    ET
    public override void MaMethode() pour une deuxième méthode ayant le même nom que la première.

    Je fais ça sur une exécution en boucle d'un million de d'exécutions. Et ça met plus de temps en règle général qu'avec la technique qui consiste en :

    public void MaMethode() pour la première
    ET
    public new void MaMethode() pour la seconde.

    Bien sur je fais appel aux deux méthodes dans les exécutions.

    Donc quelle est vraiment l'utilité du virtual et du override en terme de rapidité d'exécution ? (à moins que j'ai mal compris comment les utiliser, ce qui peut aussi se poser).

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    à moins que tu fasses bcp de boucles d'1 millions d'itérations, chercher ce genre d'optimisation, c'est inutile.

    Améliorer les performances d'un code s'est avant tout améliorer le chargement des données, l'accès à ces données (un dictionnaire étant plus rapide qu'une liste à partir d'une certaine taille, etc...)..

    Après, t'as tjs le classique StringBuilder à la place du String pour concaténer (mais là encore, les gains sont "minimes" en fonction de la quantité de traitement)...

    Avant de regarder celà, il vaudrait mieux (mais peut-etre est-ce déja fait regarder la gueule globale du code, de l'architecture, etc...

    Ah oui, l'utilisation des mécanismes de reflection (par exemple, pour faire des plugs-in, et autre, Interface, etc..) coute pas mal cher quand meme en .Net

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Merci à toi theMonz31

    Je me renseigne sur le mécanisme de réflexion.

    En effet, tester de manière aussi brutale un tel nombre d'exécutions ( sur un programme réalisé en 5 minutes ) ne me permet sans doute pas de tester les réelles capacités de ce code (qui, je l'avoue aussi ne représente pas grand chose de concret).

    Je viens de débuter un stage en informatique, et comme ma vraie mission n'a pas encore commencée, je me renseigne sur son sujet ^^.

    Merci à vous en tous cas.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 586
    Par défaut
    Le couple virtual/override est plus long et c'est normal: la véritable méthode à exécuter est déterminée à l'exécution quand le vrai type de la variable est connu, pas à la compilation. Et donc ça rallonge l'exécution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performance hibernate(temps d'execution)
    Par santati dans le forum Hibernate
    Réponses: 3
    Dernier message: 24/11/2009, 12h52
  2. limit et temps d'execution avec oracle et PHP
    Par dor_boucle dans le forum Oracle
    Réponses: 20
    Dernier message: 10/12/2005, 14h31
  3. Temps d'execution d'une requête
    Par Maglight dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/01/2005, 08h38
  4. [VB.NET] Temps d'éxécution d'une page...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/06/2004, 12h20
  5. Connaitre le temps d'execution d'un pgm ?
    Par yacinechaouche dans le forum C
    Réponses: 7
    Dernier message: 27/01/2003, 20h57

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