begin process at 2012 02 16 01:44:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Optimisation du code

 > MICROSECONDE OU BENCHMARK DE VITESSE SOUS VB

MICROSECONDE OU BENCHMARK DE VITESSE SOUS VB


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Optimisation du code Niveau :Initié Date de création :29/11/2002 Date de mise à jour :29/11/2002 08:04:54 Vu :6 418

Auteur : Proger

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

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

  • '========= 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
'========= 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



 Sources du même auteur

Source avec Zip Source avec une capture ENREGISTREUR WAVEIN, FILTRE ET ANALYSE SPECTRALE
Source avec Zip Source avec une capture ATTCALC : RENDU D'ATTRACTEURS ETRANGES DE CLIFFORD
Source avec Zip Source avec une capture EXPLORATEUR FRACTALE MANDELBROT HAUTE DEFINITION
TUTORIEL OPTIMISATION AVANCÉES : COMPILATION, COMPILATEUR ET...
Source avec Zip Source avec une capture ANALYSEUR D'EXECUTABLES VB6 (BETA RELEASE)

 Sources de la même categorie

Source avec Zip FONCTIONS PRATIQUE POUR LISTVIEW par Galactus13
Source avec une capture Source .NET (Dotnet) HISTOGRAMME - SUITE - GRAPHIQUE DE BARRES VERTICALES POUR UN... par tchconst
Source .NET (Dotnet) HISTOGRAMME (BIS) BARRES VIA DATATABLE 100 % PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) AFFICHER UN HISTOGRAMME PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) PROFIL BINAIRE D'UN OBJET par tchconst

Commentaires et avis

Commentaire de jackky le 07/04/2003 00:23:52

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 @ +

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales