Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TEMPS D'EXECUTION D'UN BOUT DE CODE (BENCHMARK POUR OPTIMISATION)


Information sur la source



Description

Cliquez pour voir la capture en taille normale
Bonjour à tous,

Voilà j'ai fait cette source car, n'étant pas spécialement un pro de l'optimisation, cela me permet de déterminer quelle partie d'un bout de code prend le plus de temps à s'executer et si je peux l'améliorer.


Il y a 2 projets :

-Le premier est un exe standard, ouvrez le et placez le bout de code que vous voulez tester dans le module, dans la fonction (tout est expliqué). Lancez le programme, sélectionnez le nombre d'itérations et vous verrez alors le temps d'execution du code en millisecondes. Libre à vous après d'essayer d'améliorer la rapidité de votre code et de re-tester.
Avantage : vous pouvez parametrer le nombre d'itérations et modifier le code en dehors de votre programme, mais vous etes obligé de copier le code

-Le second est un ocx. Générez-le. Ensuite dans votre programme, insérez le sur votre form (après l'avoir ajouté parmis vos controles).
Il y a 2 méthodes à appeler : BenchStart (au début du code à mesurer),BenchStop (à la fin). Vous pouvez alors récupérer le temps écoulé grace à la propriété "Interval".
Avantage : pas besoin de copier le code ailleurs, le benchmark s'insère directement dans votre projet. Très simple à utiliser, mais cela ne permet pas de faire plusieurs itérations (ou alors il faut le faire vous meme)

 

Conclusion

Comme d'ab, en espérant que ça serve à quelqu'un ;)
MadMatt
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Cacophrene le 12/08/2006 07:10:47

Salut !

Voici deux suggestions :

1- GetTickCount donne des mesures en millisecondes (pas très précises). Pour un benchmark plus précis, surtout pour comparer des opérations rapides (je pense par exemple à deux petites boucles équivalentes For To et For Each), il peut être préférable d'utiliser QueryPerformanceCounter.

2- Vu que les mesures dépendent beaucoup, sous Windows, de l'état du système au moment de la mesure, pourquoi pas refaire le test plusieurs fois, puis calculer une moyenne qui a toutes les chances d'être assez proche de la réalité ?

Cordialement,
Cacophrène

signaler à un administrateur
Commentaire de BruNews le 12/08/2006 10:12:18 administrateur CS

Sers toi de cela:
http://www.vbfrance.com/code.aspx?id=18494
et tu liras les ticks cpu pour une vraie mesure fine.

signaler à un administrateur
Commentaire de MadM@tt le 12/08/2006 14:20:25

Ok c'est fait, regardez la capture pour voir les modifications.
Enfin cette modif sera beaucoup plus utile pour l'ocx, car avec l'ocx on execute qu'une fois le code à mesurer donc il faut un compteur très précis.
Par contre, en ce qui concerne le fait de réaliser le test plusieurs fois, je ne vois pas la différence entre augmenter le nombre d'itération ?? Plutot que de réaliser 10 fois le test, par exemple, j'execute 10000 fois la fonction au lieu de 1000, et je décale la virgule.
Enfin si vraiment il y en a besoin je le rajoute ;)
Merci à vous 2

signaler à un administrateur
Commentaire de Cacophrene le 12/08/2006 15:43:38

Salut !

Oulà... Laisse tomber la deuxième suggestion. Ce que j'ai écrit ce matin (message du 12/08/2006 07:10:47) ne veut rien dire.

Cordialement,
Cacophrène

signaler à un administrateur
Commentaire de Cacophrene le 13/08/2006 10:05:52

Salut !

Si on considère une feuille avec 4 OptionButton sous forme d'un groupe de contrôle pour indiquer les unités disponibles (Item 0 -> secondes ; Item 1 -> millisecondes...), on pourrait par exemple obtenir (dans un module) assez grossièrement :

'========================================================
'--------------------------DECLARATIONS

'Type grand entier.
Private Type LARGE_INTEGER
   LowPart As Long
   HighPart As Long
End Type

'Evaluer le temps d'exécution d'un programme
Private Declare Function QueryPerformanceCounter _
Lib "kernel32" ( lpPerformanceCount As LARGE_INTEGER) _
As Long

'Fréquence du compteur de Windows.
Private Declare Function QueryPerformanceFrequency Lib _
"kernel32" (lpFrequency As LARGE_INTEGER) As Long

'Temps initial (au lancement du chronomètre)
Dim SwitchOn As LARGE_INTEGER
'Temps final (à l'arrêt du chronomètre)
Dim SwitchOff As LARGE_INTEGER
'Fréquence du compteur de Windows
Dim Frequency As LARGE_INTEGER

'--------------------------FONCTIONS

'Temps mis pour exécuter une fonction Test.
Private Function GetTime() As String
    Dim dCoeff As Double, sUnit As String
    Select Case SelectedItem()
        Case 0 'secondes
            sUnit = " s"
            dCoeff = 1
        Case 1 'millisecondes
            sUnit = " ms"
            dCoeff = 10 ^ 3
        Case 2 'microsecondes
            sUnit = " µs"
            dCoeff = 10 ^ 6
        Case 3 'nanosecondes
            sUnit = " ns"
            dCoeff = 10 ^ 9
    End Select
    GetTime = CStr(dCoeff * (CDbl(SwitchOff.LowPart) _
    - CDbl(SwitchOn.LowPart)) / CDbl(Frequency.LowPart)) _
    & sUnit
End Function

'Calcule le résultat d'une fonction Test (quelconque)
Private Function GetResult() As Variant
    Call QueryPerformanceFrequency(Frequency)
    Call QueryPerformanceCounter(SwitchOn)
    GetResult = Test
    Call QueryPerformanceCounter(SwitchOff)
End Function

'Dans un groupe de contrôles, choix de l'OptionButton
'sélectionné
Private Function SelectedItem() As Integer
    Dim k As Integer
    SelectedItem = -1
    Do
        If OPT(k).Value Then SelectedItem = k
        k = k + 1
    Loop Until (SelectedItem > -1) Or (k > OPT.UBound)
End Function

'========================================================

Comme ça on peut choisir l'unité de mesure la plus appropriée au type de calcul à effectuer.

Cordialement,
Cacophrène

signaler à un administrateur
Commentaire de jym le 17/08/2006 17:35:40

bjr,

moi j'apprécie votre code car il me dépanne bien.

j'ai fait des essais avec l'ocx et c'est pas mal du tout pour ce que je veux faire. la précision me suffit pour améliorer des boucles et des itérations successives. j'avais un code un peu empirique et pas trop structuré. ce genre de test me suffit amplement.

merci à vous.

jym

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Chronometrer la durée d'execution et optimisation [ par rone ] Bonjour, pour optimiser un programme je souhaiterais pouvoir chronometrer sa durée d'execution, il me semble qu'un API permet de le faire, alors si qu temps d'execution d'une application:URGENT [ par monjal26 ] Bonjour à tousJ'ai besoin de savoir si 20ms c'est bocoup, je m'explique.J'ai un programme qui tourne et pendant 20ms si une personne lance une appli m Chronometrer en ms le temps d'execution d'un methode [ par 2501 ] SalutVoila, j'ai besoin de chronometrer à la milliseconde prés le temps d'execution d'un methode. Il me faudrait un truc du type :chrono1.STARTchrono1 Optimisation vb.net et sql [ par mestari ] En fait je fais une recherche multicritères avec une requete sql (un peu compliquée) stockée dans un objet commande, je parviens grace à un dataset, u Temps d'execution maximum pour une boucle [ par titi6061 ] Bonjour tout le monde! :-)Voilà j'ai un petit problème.....Voici ma boucle:IE.Navigate "http://blabla.com"Do While IE.ReadyState <> 4 LoopCommen temps d'execution [ par j_aub ] slt tt le monde,est ce ke kelk'1 sait cmt peut on savoir te temp ke consomme une fonction pour s'executé?en fait je vx faire une comparaison entr temps d'execution [ par damd ] j'aurai aime savoir de quoi depend le temps d'execution d'un instruction.comment ca varie en fonction de l'instruction, de la vitesse du pc et d'autre temps d'execution [ par imanedaoudi ] bonjour, je veux calculer le temps d'execution d'un programme en vc++, est ce qu'il y a une fonction ou un bout de code qui fait ca? Merci pour toute le temps d'execution [ par imanedaoudi ] bonjour, je veux calculer le temps d'execution d'un programme en vc++, estce qu'il y a une fonction ou un bout de code qui réalise cette tache? Merci Problème : Temps d'execution de la commande OleDbDataAdapter.Update VB.Net [ par Dzvirfein ] Alors pour vous expliquer mon problème, J'utilise la technologie VB.Net et OleDb pour lire un fichier CSV et l'enregistrer dans une base de donn


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.