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

VB.NET Discussion :

optimiser son code


Sujet :

VB.NET

  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut optimiser son code
    Bonjour,

    Je me pose quelques questions sur comment, d'une maniere generale, gagner du temps de calcul dans mon code. Je n'ai pas reussi a trouver grand chose de bien consistant sur le web a ce sujet... Peut-etre quelqu'un aurait-il un ou deux liens sur comment optimiser son code en vitesse ?

    Je suis autodidacte en VB.Net et donc je pense que j'ai du passer a cote d'un certain nombre de "regles" et/ou conventions de programmation qui doivent paraitre evidentes aux pros du code. Parmi mes interrogations:

    - Un passage par valeur est-il plus "couteux" en temps qu'un passage par valeur ?

    - Imaginons qu'on dispose d'une classe assez volumineuse (nombreuses variables et fonctions), et dont je veux utiliser certaines de ses variables, est-il plus judicieux de passer en argument l'instance entiere de la classe ou bien d'en extraire au prealable les variables concernes et de passer ces variables ?

    - Les ancetres codeurs qui m'entourent me disent toujours qu'il est toujours meilleur d'ecrire a * a plutot que a ^2.0. Qu'en est-il ? Est-ce toujours vrai avec nos langages "modernes", ou bien c'est un mythe qui n'a plus cours de nos jours ?

    - Les classes (ou plutot leurs fonctions) partagees (Public Shared Function) sont elles moins "efficaces" en terme de temps de calcul que des fonctions de classe que l'on instance ?

    Merci pour vos eclairages avises.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Voilà 2 liens qui donnent pas mal de petits trucs pour améliorer les perfs en .NET (en anglais) :
    http://msdn.microsoft.com/en-us/library/ms973839.aspx
    http://dotnet.sys-con.com/node/38916

    Citation Envoyé par giuseppe2 Voir le message
    - Imaginons qu'on dispose d'une classe assez volumineuse (nombreuses variables et fonctions), et dont je veux utiliser certaines de ses variables, est-il plus judicieux de passer en argument l'instance entiere de la classe ou bien d'en extraire au prealable les variables concernes et de passer ces variables ?
    Si c'est une classe, de toutes façons tu ne passeras qu'une référence vers l'instance, pas une copie de l'instance. Après, ça dépend de ce que tu veux faire, mais a priori ce n'est pas plus couteux de passer une référence vers ton instance que de passer seulement certain membres.
    Au passage, les fonctions ne rendent pas la classe "volumineuse", dans la mesure où elles n'occupent pas plus de mémoire s'il y a 1 000 000 d'instances que s'il y en a une...

    Citation Envoyé par giuseppe2 Voir le message
    - Un passage par valeur est-il plus "couteux" en temps qu'un passage par valeur ?
    oups, ça sent l'erreur de copier-coller
    d'après le premier lien que je t'ai donné, un passage par référence est un peu plus couteux (plus d'indirections)

    Citation Envoyé par giuseppe2 Voir le message
    - Les ancetres codeurs qui m'entourent me disent toujours qu'il est toujours meilleur d'ecrire a * a plutot que a ^2.0. Qu'en est-il ? Est-ce toujours vrai avec nos langages "modernes", ou bien c'est un mythe qui n'a plus cours de nos jours ?
    En général les compilateurs actuels sont relativement "intelligents", et sont capables d'optimiser ce genre de chose. Mais si l'optimisation dans ce cas particulier est assez évidente (car l'exposant est entier), c'est un peu moins simple avec un exposant non-entier... Tu peux toujours comparer le code généré par a*a et a^2 avec Reflector pour être sûr.

    Citation Envoyé par giuseppe2 Voir le message
    - Les classes (ou plutot leurs fonctions) partagees (Public Shared Function) sont elles moins "efficaces" en terme de temps de calcul que des fonctions de classe que l'on instance ?
    Non
    S'il y a une différence, ce serait plutôt dans l'autre sens : les fonctions statiques (Shared) seraient a priori un peu plus rapide. Mais ça m'étonnerait que tu voies une grande différence...


    Pour finir, si tu codes en VB, tu peux améliorer nettement les perfs en évitant le "late binding" (c'est à dire appeler une méthode d'un type particulier sur une variable de type Object, sans garantie que la méthode existe vraiment)
    Par exemple, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Sub Main()
            ' Sets up the variable.
            Dim helloObj As HelloWorld
            ' Creates the object.
            helloObj = new HelloWorld()
            ' Early binding
            helloObj.PrintHello("Visual Basic Early Bound")
        End Sub
    sera a priori plus rapide que celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Sub Main()
            ' Sets up the variable.
            Dim helloObj As Object
            ' Creates the object.
            helloObj = new HelloWorld()
            ' Invokes the print method as if it was early bound
            ' even though it is really late bound.
            helloObj.PrintHello("Visual Basic Late Bound")
        End Sub
    Parce que dans le premier cas, le compilateur sait à l'avance que la méthode PrintHello existe dans le type HelloWorld, alors que dans le second cas, il faut déterminer à l'exécution la méthode à utiliser (et ça plante si elle n'existe pas)

  3. #3
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Merci pour cette reponse! Tres interessant!

    Je vais jeter tout de suite un coup d'oeil sur ces liens.

Discussions similaires

  1. [WD15] optimiser son code
    Par tux59 dans le forum WinDev
    Réponses: 1
    Dernier message: 07/06/2010, 11h57
  2. comment optimiser son code?
    Par airod dans le forum Débuter
    Réponses: 1
    Dernier message: 28/07/2009, 17h38
  3. comment optimiser son code en calcul ???
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/03/2006, 10h41
  4. Réponses: 9
    Dernier message: 22/02/2006, 11h32
  5. [Perf] Comment optimiser son code ?
    Par Frifron dans le forum Général Java
    Réponses: 12
    Dernier message: 11/08/2005, 09h05

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