Microseconde ou benchmark de vitesse sous vb

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 816 fois - Téléchargée 38 fois

Contenu du snippet

Originallement trouvé sur le ng microsoft.public.fr.vb

Utilise des API qui permettent de mesurer une différence de temps beaucoup plus infime que Timer ou GetTickCount

Une utilisation intéressante est de faire des tests de rapidité l'aglorithmes, ou de portion de code, pour optimiser son application.
Vous verrez la difference sur un simple for i = 1 to 100 : next lorsque i est de type variant et i de type integer !

J'ai codé en urgence un "WaitMicroseconde" qui est l'équivalent en plus préçis de Sleep.

Source / Exemple :


'========= Declarations =======
Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type

Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long

' =========== SUBS =========

Public Function TestMyAlgo(AlgoParam1 As Long, Optional AlgoParam2 As Long = 0) As String
Dim curStart As LARGE_INTEGER
Dim curEnd As LARGE_INTEGER
Dim curFreq As LARGE_INTEGER
Dim fResult As Double
Dim sText As String
Dim TmpCalc As Boolean

QueryPerformanceFrequency curFreq  'relevé du "top par secondes"
QueryPerformanceCounter curStart  'relevé d'un top (début de mesure)

'TmpCalc = MonAgloEnTest(AlgoParam1)
WaitMicroSeconde 20

QueryPerformanceCounter curEnd 'relevé d'un autre top (fin de mesure)

'conversion du résultat inter-top en millisecondes
fResult = 1000 * (CDbl(curEnd.lowpart) - CDbl(curStart.lowpart)) / CDbl(curFreq.lowpart)
'formattage pour l'affichage
TestMyAlgo = Format(fResult, "#0.000000") & " ms"

End Function

Public Sub WaitMicroSeconde(Duree As Long)
'attend "duree" microsecondes.
'Des test montre que c'est  = Duree + ou - x microsecondes...!
Dim curStart As LARGE_INTEGER
Dim curEnd As LARGE_INTEGER
Dim curFreq As LARGE_INTEGER
Dim WaitTop As Long
QueryPerformanceFrequency curFreq
QueryPerformanceCounter curStart
WaitTop = curStart.lowpart + Int(Duree * 3.38) '* Int(CDbl(curFreq.lowpart) / 894950)
Do
    QueryPerformanceCounter curEnd
Loop Until curEnd.lowpart >= WaitTop

End Sub

A voir également

Ajouter un commentaire

Commentaire

Messages postés
50
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
6 juillet 2003

salut moi je voudrais utiliser les microseconde pour aller verifier l'etat d'une pin de mon port serie genre toute les 20 microseconde
tu pourais me refiller un coup de main pour faire ca

merci ton code est vraiment super je pensais pas on pouvais aller plus bas que des milliseconde en vb!
jaurais appris le c++ sinon ca aurrait pris un bout de temps mais bon!

merci @ +

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.