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

C++Builder Discussion :

Exécution ralentie quand RAD Studio n'est pas lancé


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Exécution ralentie quand RAD Studio n'est pas lancé
    Bonjour à tous

    Je vous explique mon problème.
    Je suis en train de développer un logiciel chargé d'afficher une cible qui se déplace à l'écran.
    Lorsque j'exécute mon logiciel alors que RAD Studio est lancé, aucun problème, ma cible se déplace normalement.
    Lorsque j'exécute mon logiciel sans que RAD Studio ne soit lancé, la cible est ralentie.

    N'y aurait-il pas une case à coché pour inclure une librairies ou autres dans les paramètres de compilation.

    Merci d'avance pour votre aide

  2. #2
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Bonjour,

    Dans les options de projet -> lieur c++ -> lier avec la RTL dynamique à "false" et dans options de projet -> packages lier avec les packets d'execution à false aussi.

    Tu passes facilement de 100ko de programme à 3Mega par contre.

    Après est-ce que ton ralentissement est du à ces packets manquants, aux dll manquantes qui n'étaient pas inclues, rien n'est moins sur.

    Tu peux aussi utiliser UPX pour compresser ton .EXE personnellement ça m'accélère le lancement et réduit la taille de l'exécutable d'un facteur entre 2 et 5 suivant mon exe, mais pas la rapidité d'exécution ( normal ).
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Bonjour Argol_Medusa et merci pour ta réponse

    Citation Envoyé par Argol_Medusa Voir le message
    Bonjour,

    Dans les options de projet -> lieur c++ -> lier avec la RTL dynamique à "false" et dans options de projet -> packages lier avec les packets d'execution à false aussi.

    Tu passes facilement de 100ko de programme à 3Mega par contre.
    Je le fait systématiquement cette manip sinon tu ne peux pas exécuter ton application sur une machine ne disposant pas de RAD Studio.

    J'ai essayé d'améliorer mon logiciel en créant un Thread pour alléger le Thread Principal. Dans le programme principal je ne m'occupe que de l'affichage et dans le Thread secondaire j'effectue les calculs pour réaliser l'affichage mais c'est toujours pareil.

    Il doit y avoir quelques chose que RAD Studio optimise quand il est lancé c'est obligé car franchement je ne comprend pas comment l'exécution de mon application peut être ralentis quand RAD n'est pas lancé et normale quand celui-ci est juste démarré sans ouvrir mon projet.

    Si quelqu'un à une piste je suis preneur car je m'arrache la tête là.

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Est-ce que tu lances ton appli depuis l'IDE directement, ou en dehors de l'IDE quand celle-ci est lancée ?

    Quand tu exécutes l'appli dans RAD Studio, c'est en débug ou en release ?
    Est-ce que tu as essayé l'option "Exécuter sans débugage" ?

    Dans les options de l'IDE, est-ce que les variables d'environnement sont redéfinies et diffèrent fortement de celles de Windows ??

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    J'exécute mon application en dehors de l'IDE

    J'ai fait un test, je lance mon application et démarre mon affichage, il est lent.
    Comme il y a des Pauses dans mon affichage, j'en profite pour lancer RAD et là la partie suivante est à vitesse normale. A une Pause suivante, je ferme RAD, et l'affichage suivant est à nouveau lent.

    Pour les variables d'environnement, je n'y ai jamais touché donc je ne sais pas et je l'avoue que sur ça, je ne maitrise pas.

  6. #6
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    J'exécute mon application en dehors de l'IDE
    J'ai fait un test, je lance mon application et démarre mon affichage, il est lent.
    Comme il y a des Pauses dans mon affichage, j'en profite pour lancer RAD et là la partie suivante est à vitesse normale. A une Pause suivante, je ferme RAD, et l'affichage suivant est à nouveau lent.
    T'es sérieux? O_o

    Alors ça j'avais encore jamais vu.

    Tu es sur quelle version du C++ builder ?
    Quelle version d'OS ?
    Ton programme fait quoi exactement?
    Est-ce que ton affichage est fait à partir de lib 3D style OpenGL ou direct X ? ( si c'est le cas ça peut venir des drivers 3D et de la manière dont les données sont envoyées directement au matériel ou en passant par le CPU ).

    Utilise-t-il des trucs exotiques, libs particulières ou autre ?
    Nécessite-il une connexion réseau ou accès à un disque particulier ?

    Personnellement c'est la première fois que l'on me décrit quelque chose comme ça, tu as du tomber sur un os

    Essaye de compacter ton executable avec UPX ( qui va virer plein de trucs inutiles ou liés au compilateur ) pour voir si ça change quelque chose.
    Ca permettra de nous aiguiller sur l'origine si le "ramage" disparait.
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Alors je suis sous windows 7 avec RAD Studio XE3

    Sinon mon logiciel doit afficher une cible qui se déplace à l'écran suivant un profil de vitesse.
    Au départ je faisais l'affichage et le déplacement dans mon tableau de Frames (coordonnées écran de la cible à un moment donné) directement dans le programme principal. Je croyais que c'était cela qui ralentissait, alors j'ai déplacé la partie calcule de Frame dans un Thread et gérer seulement l'affichage dans le programme principal, mais c'est toujours pareil.

    pour l'affichage j'utilise le Canvas de base avec les fonctions de dessins de bases pour ma cible. Vu que j'ai qu'une cible sur un fond uni, j'ai pensé que cela suffirait. Je suis entrain de me pencher sur un affichage en OpenGL justement pour voir si cela règle le problème.

    Pour information, j'ai également une licence pour la version 2009 que j'ai installé sur la machine où le logiciel sera utilisé et cela à le même effet (ralenti sans l'IDE lancé et normal quand l'IDE tourne en arrière-plan).
    Pour l'instant j'ai paré au plus pressé vu que ce logiciel doit être utilisé rapidement mais je t'avoue que je sèche un peu là.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut kurul1
    A tu la possibilitée d'assembler ton projet sur un autre ordinateur
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Membre actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Points : 242
    Points
    242
    Par défaut
    Merci pour les infos, j'ai la même config que toi (Win7 avec XE3).
    Est-ce que tu as pu essayer avec UPX ? http://upx.sourceforge.net/

    Autre question : est-ce que tu as bien défini la priorité de ta thread ? (normalement le RAD est pas sencé pouvoir modifier la propriété d'un programme tierce mais bon, on sait jamais).

    Sinon essaye de mettre des traces de temps dans ton code pour voir la partie qui fait ralentir, ca devrait permettre de trouver l'origine du problème directement.
    Désolé, on savait pas que c'était impossible, alors on l'a fait

  10. #10
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je ne peux pas l'utiliser UPX
    Il se lance et se referme immédiatement.
    J'ai vu que c'était une version 32 et je suis en 64 donc c'est surement ça
    Mais du coup je ne peux rien faire de ce côté là

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Il y a deux possibilités qui ne résolvent pas le problème mais qui pourraient le contourner (au cas où ...).

    A)
    Pour celà il suffirait de développer une classe pour générer une fenêtre à l'aide des API windows : dotée de sa propre winproc et de son propre process graphique (double buffering facile à mettre en oeuvre).
    Donc, in fine, pour disposer d'un objet autonome vis à vis de ce que BCB met en place.
    Cette fenêtre aura comme paramètres : WS_EX_TOPMOST, WS_OVERLAPPEDWINDOW et... HWND_DESKTOP pour être une fille du DESKTOP.

    J'ai fait un petit test avec mon BCB3 Pro (à l'aide de ce que je développe avec DEV CPP) qui fonctionne très bien au niveau des apparences et des mécanismes !
    Reste à tester ton sprite : le code ressemblera à ce que tu fais avec TCanvas sauf que dans ce cas on code avec un HDC !
    Testé sur XP et il ne devrait pas y avoir de problèmes avec WINDOWS 7.
    Il va de soi que le code est disponible.

    B)
    Mais il y a peut-être plus simple, en mettant en place un Timer (API windows) fonctionnant avec sa propre callback.
    Il est possible, en effet, que BCB utilise son TTimer en lui imposant de transmettre les messages (WM_TIMER) vers la Form ce qui... peut poser des problèmes !!!
    A ce stade bien lire la doc sur msdn : SetTimer.

    A plus !

  12. #12
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour tes propositions henderson

    Actuellement je suis passé sur un autre logiciel car j'ai de la demande, je vais donc rester avec ma solution un peu bancale de faire tourner l'ide derrière. Mais dès que j'aurais un peut de temps je me pencherais sur tes solutions

  13. #13
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    Je ne peux pas l'utiliser UPX
    Il se lance et se referme immédiatement.
    J'ai vu que c'était une version 32 et je suis en 64 donc c'est surement ça
    Mais du coup je ne peux rien faire de ce côté là
    UPX fonctionne très bien sur Windows 7 64-bit. C'est normal qu'il se ferme dès son lancement, c'est un logiciel qui fonctionne par ligne de commande. Soit tu fais un fichier batch ou sinon tu ouvres une fenêtre de terminal.

    Exemple de ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    upx.exe --ultra-brute -qq "Win32\Release\Projet.exe"
    Regarde le fichier upx.html pour savoir comment l'utiliser.

    Si tu veux un interface, regarde BCBStriper.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Est-ce que ton appli utilise des composants vraiment très particuliers ?
    Est-ce que tu as des experts/paquets de composants exotiques installés dans Builder ??

    C'est quand même comme problème....

    Pour UPX: ça n'améliorera que le temps de chargement de l'exe... Un fois la décompression en mémoire effectuée, le code exécuté sera le même....

Discussions similaires

  1. Exécuter un cron job quand mon pc n'est pas allumé
    Par Ismatus1 dans le forum Linux
    Réponses: 7
    Dernier message: 11/11/2011, 18h04
  2. Réponses: 2
    Dernier message: 23/12/2009, 14h41
  3. Clique souris quand la fenêtre n'est pas en focus
    Par Orfvz dans le forum GTK+ avec Python
    Réponses: 0
    Dernier message: 19/04/2008, 03h30
  4. Quand ça tourne, c'est pas bien
    Par zooffy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 29/05/2007, 17h38
  5. faire un forward quand l'action n'est pas trouvée
    Par newbeewan dans le forum Struts 1
    Réponses: 1
    Dernier message: 07/03/2007, 13h22

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