Optimisation !

Signaler
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010
-
Bonjour, je voudrais transformer cette expresion :

If (Matrix(lngI).Num(0).vBit(0) =Number1.vBit(0) And _
Matrix(lngI).Num(0).vBit(1) =Number1.vBit(1) And _
Matrix(lngI).Num(0).vBit(2) =Number1.vBit(2) And _
Matrix(lngI).Num(0).vBit(3) =Number1.vBit(3)) Then
End If

En :

If (Matrix(lngI).Num(0).vBit =Number1.vBit) Then
End If

Seulement Vb n'en veux pas sans doute pks vBit est un tableau, si qq à une optimisation à me proposer je suis preneur :)

8 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Salut,



En effet, VB ne sais pas comparer un tableau avec un autre tableau.
Donc tu n'a guère d'autre choix que de tester tout les éléments du
tableaux, que ca soit dans une boucle for ou pas.

_
Avant de poster dans le forum,
Prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010

Merci ;)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ntdll.dll peut faire beaucoup plus rapide, j'ai déjà mis ici:
http://www.vbfrance.com/forum.v2.aspx?id=610807

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010

Slt merci pour ta réponse : J'essais de faire

tt = RtlCompareMemory(Matrix(lngI).Num(0).vBit(0), Number1.vBit(0), 4)
tq = RtlCompareMemory(Matrix(lngI).Num(1).vBit(0), Number2.vBit(0), 4)

Mais tt et qt me renvoie 4 losque il devrai au moint avoir 1 variable <> 4

As tu une solution ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
tt = RtlCompareMemory(Matrix(lngI).Num(0).vBit(0), Number1.vBit(0), 4)
J'espère que tu passes les bons params:
Ton 4 doit être le nbr d'octets à comparer.

tt indique au retour le nbr d'octets identiques, donc si tt vaut le même nbr que param en entrée alors c'est identique.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010

ha okay :) ça marche, mais alors il y a un probleme de performence, car
s je lance une simulation sur une boucle de 1000, RtlCompareMemory est plus lent que si je fesait
If (Matrix(lngI).Num(0).vBit(0) =Number1.vBit(0) And _
Matrix(lngI).Num(0).vBit(1) =Number1.vBit(1) And _
Matrix(lngI).Num(0).vBit(2) =Number1.vBit(2) And _
Matrix(lngI).Num(0).vBit(3) =Number1.vBit(3)) Then
End If

Lol domm
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Il faut savoir qu'un appel à une fonction de l'API Windows est plus
long qu'un appel à une fonction standard de VB : étant donné que la
fonction n'est pas compilée avec le programme, l'appel est forcément
plus coûteux.



Ici, vu qu'il ne s'agit que de tester si un tableau est égal à un
autre, je pense que VB sera plus rapide jusqu'à une certaine taille du
tableau (sur 10000 ou 100000 lignes dans ton tableau, je pense que la
fonction de l'API ira bien plus vite par exemple).

_
Avant de poster dans le forum,
Prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
Messages postés
85
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
3 août 2010

Merci pour ton aide :) je vais pouvoir poster ma source aujourd'hui :m)