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 :

Performance : comparaison de 2 méthodes


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Performance : comparaison de 2 méthodes
    Bonjour,

    Actuellement, la plupart de mes affectations de variables à partir de données issues de DataGridView sont réalisées avec un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' exemple dans un Event RowValidating
    mavariable = MonDTG.Rows(e.RowIndex).Cells("PrixAchat").Value
    Je viens de me rendre compte qu'il y a beaucoup plus simple (du moins en écriture) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mavariable = monBindingSource.Current("PrixAchat")
    Bon là, ce n'est pas très flagrant, mais parfois, au lieu d'avoir une succession d'enchainement de propriétés de type maVariable = A.B.C.D.E(x).Value, je peux me contenter de maVariable = F.G(x)

    Au-delà du raccourcissement de la syntaxe, je me demandais si ce n'était pas plus "direct" de passer par le bindingsource que par le DataGridView dont les valeurs dérivent justement de ce que lui donne le bindingsource.

    Je voulais savoir si ça vaut le coup de changer toutes mes syntaxes en termes de performance ? J'imagine qu'il n'y a pas forcément de vérité universelle donc les avis des uns et des autres m'intéressent

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    le mieux reste de tester :

    system.diagnostics.stopwatch est un chronomètre (.Start .Stop .ElapsedMilliseconds .Reset)

    par contre une instruction prend en général quelques nanosecondes, donc ca ne peut pas être mesuré directement avec le chrono
    pour ca le mieux reste de faire une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    chrono.Start
    for i as integer = 0 to 1000000
     ' instruction
    next
    chrono.stop
    msgbox (chrono.elapsedmlliseconds.tostring)
    sur autant d'itérations on voit mieux la différence (s'il y en a une)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Pour ajouter à ce qu'a dit Pol63 ; penser à faire les mesures en config release et pas debug et d'abord lancer une fois (non chronométrée) les éléments mesurés pour que le JIT fasse son boulot
    La première fois qu'une méthode est appelée le JIT la compile et fait au besoin les optimisations qu'il juge utile ; et ça a un coût, les appels suivant utilisent directement ce "résultat"

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Sur le principe proposé par Pol63, j'ai donc fait un essai.
    Contrairement à ce que je pensais la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable = monBindingSource.Current("PrixAchat")
    est bien plus longue (presque 40 fois plus longue) à l'exécution que la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable = MonDTG.Rows(e.RowIndex).Cells("PrixAchat").Value

    Merci en tout cas de la méthode. Je penserai à m'en servir à chaque fois que je me chercherai à comparer 2 codes aboutissant au même résultat.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/03/2015, 14h31
  2. Comparaison entre deux méthodes
    Par Décembre dans le forum Statistiques, Data Mining et Data Science
    Réponses: 1
    Dernier message: 11/12/2014, 13h23
  3. Comparaison de structures : méthode miracle ?
    Par boboss123 dans le forum C
    Réponses: 20
    Dernier message: 14/12/2012, 09h50
  4. Réponses: 9
    Dernier message: 19/05/2009, 22h42
  5. Question performances : comparaisons listes Vs tableaux
    Par BSans dans le forum Général Java
    Réponses: 2
    Dernier message: 15/05/2009, 12h27

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