Site:  Cours VB.net  
7.3 Comparaison VB6 VB.Net.

Page mise à jour le 06/02/2008.

VB.NET est t-il rapide?

Comment VB.NET 2003 est situé en comparaison avec les autres langages de programmation?

    Le site OsNews.com publie les résultats d'un petit benchmark comparant les performances d'exécution sous Windows de plusieurs langage de programmation en 2003 avec VB 2003.
Les langages .NET - et donc le code managé en général - n'ont pas à rougir devant Java, pas plus que face au langage C compilé grâce à GCC. Voici un aperçu des résultats chiffrés (valeurs les plus faibles = les meilleures performances) :

                     int        long    double  trig      I/O     TOTAL

Visual C++      9.6       18.8    6.4       3.5    10.5    48.8
Visual C#        9.7       23.9    17.7     4.1     9.9     65.3
gcc C              9.8       28.8    9.5       14.9  10.0    73.0
Visual Basic   9.8       23.7    17.7     4.1    30.7    85.9
Visual J#         9.6       23.9    17.5     4.2     35.1   90.4
Java 1.3.1       14.5      29.6    19.0     22.1   12.3    97.6
Java 1.4.2        9.3      20.2    6.5       57.1   10.1    103.1
Python/Psyco  29.7     615.4   100.4   13.1  10.5    769.1
Python           322.4   891.9   405.7   47.1   11.9    1679.0

- Nine Language Performance Round-up: Benchmarking Math & File I/O [OsNews.com]

Article publier sur www.DotNet-fr.org 

 

VB.NET(2003, 2005, 2008) est-il plus rapide que VB6?

 

A- En mode Design, pour écrire un programme, l'IDE VB 2008 est beaucoup plus rapide que VB 2005.

Source

 

B- En cours d'exécution.

Exemple No1

Sur une même machine P4 2.4 G faisons tourner un même programme: 2 boucles imbriquées contenant une multiplication, l'addition à un sinus et l'affichage dans un label:

Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim k As Long
For i = 0 To 100
For j = 0 To 1000
Label1.Caption = Str(k * 2 + Sin(4)): Label1.Refresh
k = k + 1
Next
Next
End Sub

9 secondes dans l'IDE , 7 secondes avec un exécutable après compilation.

 

Imports System.Math

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

Dim j As Integer

Dim k As Integer

For i = 0 To 100

For j = 0 To 1000

Label5.Text = (k * 2 + Sin(4)).ToString : Label5.Refresh()

k = k + 1

Next

Next

End Sub

35 secondes dans l'IDE, 25 secondes avec un exécutable après compilation.

En utilisant des 'Integer' ou des 'Long', il y a peu de différence.

 

Même code:

55 secondes dans l'IDE, 45 secondes avec un exécutable après compilation.

Dur, dur!!!.

 

On rappelle que ce qui fait tourner le Framework c'est le CLR (Commnon Language RunTime); depuis la version 2 du Framework, c'est toujours  la version 2.0.50727: toujours la même.

La vitesse d'exécution des programmes est identique en VB2005 et VB 2008.

Sur mon ordinateur, depuis que j'ai ajouté VB 2008 Express (VB6 et VB 2005 Express étaient installés) , et alors que VB 6 tourne toujours aussi vite, VB 2005 et 2008 tourne beaucoup plus lentement temps d'exécution x 3!!). Explication?

Exemple No2

Sur une même machine P4 2.4 G faisons tourner un même programme: On crée un tableau de 10000 String dans lequel on met des chiffres Puis on trie le tableau.

Private Sub Command1_Click()

Dim i As Integer
Dim A(10000) As String
Dim j As Integer

Dim N As Integer
Dim Temp As String
N = 9999

'remplir le tableau

For i = 9999 To 0 Step -1
    A(i) = Str(9999-i)
Next i

'trier
For i = 0 To N - 1
    For j = 0 To N - i - 1

        If A(j) > A(j + 1) Then
            Temp = A(j): A(j) = A(j + 1): A(j + 1) = Temp
        End If

    Next j
Next i

End Sub

 

35 secondes

 

On peut optimiser la routine de tri (merci Claude: temps d'exécution 6s ) et cela va beaucoup plus vite:

  Dim i As Integer

  Dim A(10000) As String

  Dim j As Integer, iMax As Integer

 

 

  Dim N As Integer

  Dim Temp As String

 

  'remplir le tableau

  N = 9999

  For i = 9999 To 0 Step -1

    A(i) = Str(9999 - i)

  Next

 

  'trier

  For i = 0 To 9997

    iMax = 0

    For j = i + 1 To 9999

      If A(i) > A(j) Then iMax = j

    Next

    If A(i) < A(iMax) Then

      Temp = A(j)

      A(j) = A(i)

      A(j) = Temp

    End If

  Next

 

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

Dim A(10000) As String

For i = 9999 To 0 Step -1

    A(i) = (9999 - i).ToString

Next i

Array.Sort(A)

Label1.Text = "ok"

End Sub

< 1 seconde

Même code:

< 1 seconde

 

 

Moins d'une seconde avec VB.NET, 35 secondes en VB6.

La méthode 'Sort' est hyper plus rapide que la routine de tri.

(Pour être honnête, il faut dire que mon test n'est pas rigoureux car le tri VB.NET est probablement un tri 'rapide' alors qu'en VB6 la routine basic n'est pas optimisée, je ne compare donc pas les mêmes routines.)

 

En conclusion:

La couche du Framework semble ralentir considérablement la vitesse du code.

Mais, en VB.net, il faut raisonner différemment et utiliser judicieusement les classes et les méthodes au lieu de taper de longues routines.

Cela fait que en VB.Net:

   Le code est plus court et compact (moins de temps de développement)

   Le code est plus rapide.