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 :

Variables locales & optimisation compilateur


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut Variables locales & optimisation compilateur
    Bonjour,
    dans la série "mieux vaut un code clair et lisible qu'une seule ligne de code de 2000 caractères", si je prends l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public double Toto()
    {
        var i = 123D;
        var j = 456D;
     
        return  i + j;
    }
     
    public double TotoCourt()
    {
        return 123D + 456D;
    }
    Est-ce le compilateur va pondre exactement le même code MSIL pour les deux méthodes, c'est-à-dire va-t-il ou non créer des variables locales dans la méthode Toto(), alors que vraisemblablement elles ne sont là que pour la lisibilité (l'exemple est volontairement minimaliste, mais imaginons un truc plus complexe) ?

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut on pourait débatre longtemps de ce que fera réellement le compilateur qui de toute facon va essayer d'optimiser le code

    Mais j'estime que généralement la lisibilité prime sur les quelques picosecondes que l'on peut essayer de gagner par ci par la avec des bidouilles pas tres nettes

    Si le jeu en vaut vraiment la chandelle (execution en temps reel) ou nécessité indispensable de gain de performance on peut se poser des question mais dans ce cas, c'est généralement plus profondément dans le design que les solutions se trouvent plutot que sur les cas que tu donne en exemple

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    en msil je pense qu'il n'y aura pas d'optimisation, ce n'est pas le but du msil
    par contre le msil est compilé ensuite en code natif, et là des optimisations sont appliquées (ne serait-ce que selon la machine utilisée (64bits ou non etc...))

    par contre à mon avis y a peu de gens qui pourront te répondre sur du code natif ici ... .net étant en partie fait pour ne pas se préoccuper de grand chose à part le temps de développement

    avec un stopwatch tu peux faire des tests de performances entre 2 méthodes qui font la même chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut et merci pour vos réponses,
    je vais en effet faire un mini benchwork pour tester ; il est certain qu'avec les langages de haut niveau la lisibilité prime de loin sur ce genre de choses, si on se place dans un cas d'école. Dans mon cas il s'agit d'opérations assez complexes répétées plusieurs centaines de milliers de fois par seconde, d'où mon interrogation.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Dans mon cas il s'agit d'opérations assez complexes répétées plusieurs centaines de milliers de fois par seconde, d'où mon interrogation.
    Je serais curieux de voir les resultat de tes test mais mon experience c'est que dans la plupart des cas ce sont les manipulation de memoire ou sur disque qui consomment 80% du temps et dans le cas que tu montre meme si l'optimisation ne se fait pas, la manimulation memoire est insignifiante

    Ce qui coute sont les allocation, les move etc

    Par exemple
    String a=a+b;
    Est beaucoup plus couteux que l'usage d'un stringbuilder

  6. #6
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Je viens d'effectuer de multiples tests, avec des variables locales de types double, int, et string.
    Même pour plusieurs dizaines de variables, avec de boucles à plusieurs millions d'itérations, la différence est tout simplement ridicule. Tant mieux !

    Je n'ai pas fait de tests avec des variables de types référence, ça pourrait changer.

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 15h44
  2. Réponses: 3
    Dernier message: 02/03/2006, 19h22
  3. [MFC] Globaliser une variable locale
    Par Philippe320 dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2005, 20h12
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 09/11/2005, 23h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

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