(VB EXpress 2010 ) Performance : avec Call et sans Call
	
	
		Bonjour,
Appel à des experts performance.
C'est un questionnement que j'ai depuis des années, et qui fait peut-être intervenir des caractéristqiues propres à chaque langage et compilateur.
Pas vraiment une guerre entre programmation dite spaghetti et programmation structurée ou objet. Quoique ....
( et je suis d'une très ancienne école  :D   mais très peu expérimenté en VBNet  ).
En VBNet ( 2010 express ) je crée une petite application qui effectue une simple opération d'incrémentation d'un nombre CC dans une boucle.
Le premier test se fait avec le calcul dans la boucle, l'autre avec le calcul dans un call.
Les résultats sont éloquents ( dans mon test ).
Est ce moi qui utilise très mal l'art de programmer en VBNet?   Y a t il des optimisations à la compilation que je n'ai pas vues? 
Je sais que je peux faire de multiples appels à ma procédure depuis différents endroits dans mon programme, et que je ne dois donc pas répéter le code. Que cela facilite la maintenance ... 
mais quand même, la performance peut être cruciale dans certains cas.
Cette performance est d'ailleurs importante dans une application que je construis.  
Boucle avec Call    18 secondes
Boucle sans Call     5 secondes
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | Private Sub BCallWith_Click(sender As System.Object, e As System.EventArgs) Handles BCallWith.Click
        debuts = Now
        CC = 0
        For i = 1 To 2000000000
            Call Pr_Call()
        Next
        debute = Now
        dureet = DateDiff(DateInterval.Second, debuts, debute)
        TBDur.Text = dureet
        TBCC.Text = CC
    End Sub
 
 
    Private Sub Pr_Call()
        CC = CC + 1
    End Sub
 
    Private Sub BCallWithout_Click(sender As System.Object, e As System.EventArgs) Handles BCallWithout.Click
        debuts = Now
        CC = 0
        For I = 1 To 2000000000
            CC = CC + 1
        Next
        debute = Now
        dureet = DateDiff(DateInterval.Second, debuts, debute)
        TBDur.Text = dureet
        TBCC.Text = CC
    End Sub | 
 Et puis patatra, tout ce que je dis ne tient plus  !!!!    Je teste toutes facettes et me rends compte que si j'exécute d'abord "sans call" puis "avec call", les résultats s'inversent.
Nouveau démarrage de l'application.
Boucle sans Call    21 secondes
Boucle avec Call    12 secondes
Je redémarre encore une fois  dans l'ordre Avec puis Sans.  
Boucle avec Call    18 secondes
Boucle sans Call    5 secondes
Totalement perdu. Où est la logique?(  Peut-être pas chez moi :) )
Y a t il un endroit où je pourrais trouver des conseils, des règles de performance?
Quelques commentaires sur ceci ( en espérant avoir bien expliqué ).
Grand merci.
Pierre