[Résolu]VBA comment optimiser l'utilisation CPU dans un loop?

VBA comment optimiser l'utilisation CPU dans un loop? [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 06-07-2009 à 14:35:38    

Bonjour,
 
Voici une partie du code que j'utilise dans un ficher MS-Excel 2003. Dès que la procédure est lancée, le gestionnaire des tâches (sous windows XP) m'indique que l'utilisation CPU passe de 2% à 26% environ. Y-a-t-il un moyen pour réduire l'utilisation CPU? Merci pour vos suggestions.
 

Code :
  1. Sub test0Loop()
  2.     Dim t As Date, iloop As Integer
  3.     'Main loop
  4.     iloop = 1
  5.     Do While (iloop < 3 And "stop" <> Range("E5" ).value)
  6.         'Every 10 sec ...
  7.         t = Timer + 10: Do Until (Timer > t Or "stop" = Range("E5" ).value): DoEvents: Loop
  8.         ' ... do whatever need to be done
  9.         MsgBox "test"
  10.         iloop = iloop + 1
  11.     Loop
  12. End Sub


Message édité par bigbang01 le 07-07-2009 à 16:52:11
Reply

Marsh Posté le 06-07-2009 à 14:35:38   

Reply

Marsh Posté le 06-07-2009 à 14:46:02    

Tu peux définir la priorité dans le gestionnaire des taches pour le processus mais je sais pas si ça te convient.

Reply

Marsh Posté le 06-07-2009 à 15:30:25    

Deamon a écrit :

Tu peux définir la priorité dans le gestionnaire des taches pour le processus mais je sais pas si ça te convient.

Idéalement, ce que je recherche c'est remplacer la ligne 7 du code ci-dessus par une ligne de code qui consomme moins de CPU.


Message édité par bigbang01 le 06-07-2009 à 15:30:50
Reply

Marsh Posté le 06-07-2009 à 15:36:46    

En gros avec ton code tu veux réaliser une action à intervalle régulier ?

Reply

Marsh Posté le 06-07-2009 à 16:16:10    

Deamon a écrit :

En gros avec ton code tu veux réaliser une action à intervalle régulier ?


Tout à fait, et pendant l'attente ne pas consommer autant de CPU...

Reply

Marsh Posté le 06-07-2009 à 16:46:41    

Reply

Marsh Posté le 07-07-2009 à 15:53:10    

Merci pour ta réponse bjone. Effectivement avec le code suivant, l'utilisation CPU reste à 2% mais on ne peut pas quitter la fonction sleep en cours d'exécution sauf par exemple en utilisant Ctrl +  Pause.

Code :
  1. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Sub test2Loop()
  3.     Dim t As Date, iloop As Integer
  4.     'Main loop
  5.     iloop = 1
  6.     Do While (iloop < 3 And "stop" <> Range("E5" ).value)
  7.         'Every 10 sec ...
  8.         Sleep 10000
  9.         ' ... do whatever need to be done
  10.         MsgBox "test"
  11.         iloop = iloop + 1
  12.     Loop
  13. End Sub


Reply

Marsh Posté le 07-07-2009 à 16:07:46    

tu sleep de 100 ou 50 ms ça suffira pour réduire drastiquement l'utilisation cpu, à toi d'ajuster le contrôle de boucle en conséquence.


Message édité par bjone le 07-07-2009 à 16:09:34
Reply

Marsh Posté le 07-07-2009 à 22:09:56    

et un petit coup de DoEvents ça fera pas de mal


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed