Usage CPU à 100% programme VB [Résolu]

Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
- - Dernière réponse : us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
- 16 juil. 2010 à 11:13
Bonjour à tous,

Je me pose une question toute bête: un programme VB peut il consommer 100% de mon CPU sachant que je tourne sous XP avc 2Go de Ram et un processeur à 2.26GH?
Le programme en lui même ne m'a pas l'air très long à faire d'autant plus que je vais le corser nettement plus avec le temps.

Ormis les astuces classiques que j'ai pu trouver, y a t il un moyen d'optimiser la vitesse d'execution?

Merci pour vos avis!


Alex
Afficher la suite 

11 réponses

Meilleure réponse
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
3
Merci
Salut,

Bien sûr que c'est possible, si tu codes avec les pieds, tu peux monter très vite à 100%, par exemple si tu fais :
while (true)
doevents
if (unevariable) then
exit do
end if
wend

là tout de suite tu monte à 100% tant que ta variable "unevariable" est false
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
269
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
12 mars 2011
3
Merci
Salut,
si tu veux optimiser la vitesse d'exécution,
il faut optimiser le code, c'est à dire
faire au plus simple pour que le processeur
ai le minumum de calculs à effectuer,
par exemple préferer Case à If si il
y a beaucoup de choix différents,
ou par exemple, eviter de reposer
des conditions qui ont déjà étés verifiées...
Mais je ne saurais pas expliquer beaucoup...
Si ça t'intéresse regarde un peu le language
assembleur (ASM), qui communique directement avec le processeur.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de raffika
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
3
Merci
Bonjour,

SELECT CASE permet le test dans un intervalle.

exemple :

SELECT CASE Variable
CASE 11 TO 20
....
CASE 21 TO 30
....
END SELECT


Amicalement,
Us.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
3
Merci
Si tu as 5 minutes, je te propose ma modeste video sur SELECT CASE... http://fordom.free.fr/tuto/TutoVideoVBA/L8/L8.html

Amicalement,
Us.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de us_30
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
0
Merci
Ok,je veillerai donc à optimiser mon programme...

Merci pour ta franchise,


Alex
Commenter la réponse de isfaen
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Salut,

Oui enfin, avant d'optimiser les tests if par des select case pour y gagner 0.00001 ms, il y a bien plus de pistes d'optimisation à faire avant quand même.

Notamment éviter de rafraîchir les listes/grid à chaque modification d'un élément si tu en modifie une centaine, retracer toute une image alors qu'il suffit de ne tracer que quelques pixels, faire des requêtes SQL optimisée qui renvoie uniquement les informations que tu as besoin, bref des trucs du genre qui peuvent très rapidement te faire ramer ton programme alors que c'est très simple d'y remédier.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
0
Merci
100% en accord avec DarkSidious, difficile de dire autrement en même temps... On peut rajouter le fameux DoEvents à utiliser qu'à très bon escient... De plus, quand tu parles de VB, j'espère que tu parles de VB.NET, plutôt que VB6. La vitesse d'exécution de VB.NET étant bien plus rapide...

Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
0
Merci
En fait j'ai effectivement une fonction avec énormement de choix différents: environ 23 choix possible mais non pas selon la valeur d'une variable mais selon l'intervalle dans lequel elle se situe.

select Case ne me permet pas de travailler avec ces intervalles, y a t il une astuce ou dois-je forcer les if, elsif, else?

Merci par avance

PS: le code:

Public Function parametres(ByVal dod As Date) As Double
        If dod < #6/30/2008# Then
            txdecote = 0
            durass = 150
            ageannuldec = 0
        ElseIf dod > #6/30/2008# And dod < #1/1/2009# Then
            txdecote = 0
            durass = 151
            ageannuldec = 0
        ElseIf dod > #12/31/2008# And dod < #7/1/2009# Then
            txdecote = 0
            durass = 152
            ageannuldec = 0
        ElseIf dod > #6/30/2009# And dod < #1/1/2010# Then
            txdecote = 0
            durass = 153
            ageannuldec = 0
        ElseIf dod > #12/31/2009# And dod < #7/1/2010# Then
            txdecote = 0
            durass = 154
            ageannuldec = 0
        ElseIf dod > #6/30/2010# And dod < #1/1/2011# Then
            txdecote = 0.00125
            durass = 155
            ageannuldec = 61
        ElseIf dod > #12/31/2010# And dod < #7/1/2011# Then
            txdecote = 0.00125
            durass = 156
            ageannuldec = 61
        ElseIf dod > #6/30/2011# And dod < #1/1/2012# Then
            txdecote = 0.0025
            durass = 157
            ageannuldec = 61.5
        ElseIf dod > #12/31/2011# And dod < #7/1/2012# Then
            txdecote = 0.0025
            durass = 158
            ageannuldec = 61.5
        ElseIf dod > #6/30/2012# And dod < #12/1/2012# Then
            txdecote = 0.0025
            durass = 159
            ageannuldec = 62
        ElseIf dod > #11/30/2012# And dod < #7/1/2013# Then
            txdecote = 0.00375
            durass = 160
            ageannuldec = 62
        ElseIf dod > #6/30/2013# And dod < #7/1/2014# Then
            txdecote = 0.005
            durass = 161
            ageannuldec = 62.25
        ElseIf dod > #6/30/2014# And dod < #7/1/2015# Then
            txdecote = 0.00625
            durass = 162
            ageannuldec = 62.5
        ElseIf dod > #6/30/2015# And dod < #7/1/2016# Then
            txdecote = 0.0075
            durass = 163
            ageannuldec = 62.75
        ElseIf dod > #6/30/2016# And dod < #7/1/2017# Then
            txdecote = 0.00875
            durass = 164
            ageannuldec = 63
        ElseIf dod > #6/30/2017# And dod < #7/1/2018# Then
            txdecote = 0.01
            durass = 165
            ageannuldec = 63.25
        ElseIf dod > #6/30/2018# And dod < #7/1/2019# Then
            txdecote = 0.01125
            durass = 166
            ageannuldec = 63.5
        ElseIf dod > #6/30/2019# And dod < #7/1/2020# Then
            txdecote = 0.0125
            durass = 167
            ageannuldec = 63.75
        ElseIf dod > #6/30/2020# And dod < #7/1/2021# Then
            txdecote = 0.0125
            durass = 168
            ageannuldec = 64
        ElseIf dod > #6/30/2021# And dod < #7/1/2022# Then
            txdecote = 0.0125
            durass = 169
            ageannuldec = 64.25
        ElseIf dod > #6/30/2022# And dod < #7/1/2023# Then
            txdecote = 0.0125
            durass = 170
            ageannuldec = 64.5
        ElseIf dod > #6/30/2023# And dod < #7/1/2024# Then
            txdecote = 0.0125
            durass = 171
            ageannuldec = 64.75
        ElseIf dod > #6/30/2024# Then
            txdecote = 0.0125
            durass = 172
            ageannuldec = 65
        End If
    End Function


Alex
Commenter la réponse de isfaen
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
0
Merci
Ok, j'avais testé

Case >11 and <12


Merci beaucoup!

Alex
Commenter la réponse de isfaen
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
0
Merci
La vidéo est on ne peut plus clair, je ferai un tour sur ton site si j'ai un souci dans le futur (le prochain parlera probablement des problèmes de maximisation de fonctions codé en VB, si t'as une vidéo dessus je suis preneur )

Merci à tous pour vos réponses!


Alex
Commenter la réponse de isfaen
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
0
Merci
"maximisation de fonctions codé en VB"


Euh... d'un coup ça monte d'un cran... Faudra voir avec BruNews, car je ne serais plus de taille...

Bonne prog,

Amicalement,
Us.
Commenter la réponse de us_30