Bonjour,
Je rencontre une différence inexpliquée de performances d'une appli. vb6 entre certaines configurations.
Ainsi, pour une config. en particulier, des ralentissements sont apparus après passage de 2003 (physique) à 2008r2 virtualisé.
Après avoir regardé du côté du serveur SQL, du paramétrage de la VM, du réseau, de la config. TSE et d'autres encore, la machine a été dé-virtualisée mais même si la situation s'est un peu améliorée, c'est pas encore ça.
Les pistes s'épuisant et au vu de la compléxité de l'appli, j'ai fait deux programme identiques et hyper complexes [comme vous pouvez le constater pour la version vb6] en vb6 & vb.Net/WinForm, histoire de déblayer un peu et voir si vb6 était en cause.
Les deux config. utilisées sont les suivantes :
* "Référence" : VM 2008R2 x64 sur monoproc. Xeon X3470 2.93Ghz, configuré avec 2 cpu, 2Go de RAM.
* "Cible" : 2008R2 sur Optéron, 12Go RAM, Bipro 4 coeurs (soit 16 avec l'HT ou équivalent chez AMD). Je n'ai pas accès à la config. pour l'instant pour avoir des données plus précises (de mémoire, la carte vidéo est une ATI 1000 avec 64Mo de ram).
* Le driver de la carte vidéo est à priori le même sur les deux configs. (driver installé par l'OS et de version identique)
Et là, surprise, cela semble lié à l'affichage. Si le programme n'affiche pas l'itération en cours, les chiffres sont très proches mais dès qu'elle est affichée, les 1 à 2s sur la VM deviennent 8 ou 9 sur la machine physique pour une boucle de 100000 par exemple. Que l'on force l'affinité du process sur un seul Core ou que l'OS gère tout seul, cela ne change rien.
Le programme VB.Net (le code est le "plus" identique possible) retourne par contre des temps similaire dans les deux environnements (tout en étant meilleur sur la machine "cible").
J'ai donc l'impression que cela vient de l'affichage de vb6 (la version .Net est en WinForm pour justement rester le plus proche possible au niveau des dll de bas niveau utilisées pour gérer l'affichage) sur cet environnement mais à part çà, je sèche.
Donc, pour finir, j'ai deux questions :
* Est-ce que quelqu'un à déjà rencontré ce genre de problème ? J'ai cherché sur google mais soit mes mots clefs ne sont pas les bons, soit je suis le seul dans ce cas
* Avez-vous des pistes à me proposer ? J'ai bien penser à mettre une "vraie" CG sur le serveur "cible" mais :
1) sur le serveur VM, c'est aussi une carte intégrée
2) je ne gère pas la machine "cible" et je ne sais pas si l'intégrateur à une carte à mettre dedans...
Merci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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
29
30
31
32 ...déclarations... imax = Val(txtMax.Text) af = (chkAffichage.Value = vbChecked) de = (optDoEvents.Value) rf = (optRefresh.Value) rf2 = (optRefresh2.Value) md = (chkModulo.Value = vbChecked) For i = 1 To imax If Boucle Then s = "" For j = 1 To 100 s = "azertyuiopqsdfghjklmwxcvbn" Next j End If If md Then mdok = ((i Mod 10) = 0) Else mdok = True If mdok Then If af Then lblCpt.Caption = CStr(i) If de Then DoEvents Else If rf Then Me.Refresh Else If rf2 Then lblCpt.Refresh End If End If End If Next i lblCpt.Caption = CStr(i)
Partager