IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

diminuer charge CPU


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut diminuer charge CPU
    Bonjour,

    Je developpe une application MFC. Je trouve que mon application utilise beaucoup de charge CPU (il y a beaucoup de boucle). J'ai entendu dire qu'il existait une fonction qui permettai de "rendre la main" à Windows un certain temps et donc de diminuer la charge CPU.

    Quelqu'un en à t il déjà entendu parlé et quelle est cette fameuse fonction?

    Je vous remercie.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Si tu veux parler de Sleep, ça ne changera pas grand-chose... Si ton appli bouffe beaucoup de CPU, tu as en général les raisons suivantes :
    • C'est normal, tu fais un traitement "lourd".
    • Tu bloques la boucle de messages Windows, et ton application se "fige" tant que tu n'as pas fini ton traitement. Lancer des threads pour résoudre ça.
    • Tu effectues des appels en attente active. Par exemple, boucler sur une lecture depuis une socket au lieu d'utiliser les évènements et/ou les lectures bloquantes.


    Au pire, essaie de faire un profilage du code et repère la fonction la plus consommatrice de temps machine, que tu posteras ensuite ici... Mais il te faut les outils adéquats, et ça dépend de ta version de Visual utilisée hélas.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Si tu veux parler de Sleep, ça ne changera pas grand-chose... Si ton appli bouffe beaucoup de CPU, tu as en général les raisons suivantes :
    • C'est normal, tu fais un traitement "lourd".
    • Tu bloques la boucle de messages Windows, et ton application se "fige" tant que tu n'as pas fini ton traitement. Lancer des threads pour résoudre ça.
    • Tu effectues des appels en attente active. Par exemple, boucler sur une lecture depuis une socket au lieu d'utiliser les évènements et/ou les lectures bloquantes.


    Au pire, essaie de faire un profilage du code et repère la fonction la plus consommatrice de temps machine, que tu posteras ensuite ici... Mais il te faut les outils adéquats, et ça dépend de ta version de Visual utilisée hélas.
    Oui Sleep je connais. On m'avais parlé d'une autre fonction mais je ne m 'en souviens plus.
    Je n'utilise pas de process vraiment "lourd" mais j'ai effectivement des boucles sur lecture de socket mais elles sont dans des Threads il me semble.

    Par contre, tu me parle de profilage de code: que veux tu dire?

    J'utilise Visual studio 2008 version pro.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par totoscill Voir le message
    Je n'utilise pas de process vraiment "lourd" mais j'ai effectivement des boucles sur lecture de socket mais elles sont dans des Threads il me semble.
    Ce n'est pas parce qu'elles sont dans des threads qu'elles ne carbonisent pas le CPU... Tes threads de lecture depuis les sockets doivent occuper ZERO POURCENT de charge CPU lorsque tu n'as aucune donnée prêtre. Si ce n'est pas le cas, c'est que tes lectures ne sont pas bloquantes, donc c'est "mal".

    Citation Envoyé par totoscill Voir le message
    Par contre, tu me parle de profilage de code: que veux tu dire?
    Analyser le code (via des outils automatiques) afin de savoir combien de temps CPU chaque fonction bouffe dans le programme.

    Citation Envoyé par totoscill Voir le message
    J'utilise Visual studio 2008 version pro.
    Je ne crois pas qu'il y aie une fonction de profilage dans cette version, il me semble que ce n'est que dans la version "Development" et au dessus...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Ce n'est pas parce qu'elles sont dans des threads qu'elles ne carbonisent pas le CPU... Tes threads de lecture depuis les sockets doivent occuper ZERO POURCENT de charge CPU lorsque tu n'as aucune donnée prêtre. Si ce n'est pas le cas, c'est que tes lectures ne sont pas bloquantes, donc c'est "mal".

    Analyser le code (via des outils automatiques) afin de savoir combien de temps CPU chaque fonction bouffe dans le programme.

    Je ne crois pas qu'il y aie une fonction de profilage dans cette version, il me semble que ce n'est que dans la version "Development" et au dessus...
    Je suis d'accord avec toi mais normalement une lecture sur une socket est bloquante donc pas de problème. Un autre process qui doit me prendre de la charge CPU est la mise à jours de l'IHM.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par totoscill Voir le message
    Je suis d'accord avec toi mais normalement une lecture sur une socket est bloquante donc pas de problème. Un autre process qui doit me prendre de la charge CPU est la mise à jours de l'IHM.
    Vérifie quand même pour tes sockets : mets un breakpoint après la lecture, n'envoie AUCUNE donnée. Si tu t'arrêtes sur tes BP, c'est pas bon. Si effectivement dès que tu envoie les BP se déclenchent, alors c'est qu'elles sont bien bloquantes.

    Sinon, c'est un thread plutôt qu'un processus, je pense... Si c'est un processus, c'est visible directement dans le gestionnaire de tâches.
    Ensuite, c'est justement le profilage qui te permet de savoir quel thread / fonction carbonise le temps CPU...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Vérifie quand même pour tes sockets : mets un breakpoint après la lecture, n'envoie AUCUNE donnée. Si tu t'arrêtes sur tes BP, c'est pas bon. Si effectivement dès que tu envoie les BP se déclenchent, alors c'est qu'elles sont bien bloquantes.

    Sinon, c'est un thread plutôt qu'un processus, je pense... Si c'est un processus, c'est visible directement dans le gestionnaire de tâches.
    Ensuite, c'est justement le profilage qui te permet de savoir quel thread / fonction carbonise le temps CPU...
    Ok, merci. Je regarde ca.

Discussions similaires

  1. [Système]charge CPU
    Par dehbi dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 04/08/2005, 11h58
  2. Monter la charge CPU
    Par Dr_GonZO dans le forum Administration système
    Réponses: 2
    Dernier message: 19/05/2005, 11h08
  3. problème de charge CPU SUR ORACLE
    Par crasho007 dans le forum Administration
    Réponses: 35
    Dernier message: 19/05/2004, 15h35
  4. Charge CPU avec prog opengl + win32
    Par TibobiT dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo