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

 Delphi Discussion :

Ressources dépensées pour des timers ?


Sujet :

Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut Ressources dépensées pour des timers ?
    Bonjour

    Dans mes applications, j'ai tendance à mettre une tonne de timers (je suis rendu à 8 pour celle en cours). Évidemment, ils ne fonctionnent habituellement pas en même temps. Mais j'ai plusieurs programmes qui roulent en même temps... Donc, il peut y avoir jusqu'à une centaine de timers potentiellement actifs en même temps.

    Est-ce à risque de surcharger l'ordinateur? Est-ce ressourcivore?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    La question qui me vient concerne l'utilité des Timers. S'ils sont mis en place pour pallier un défaut de conception, il suffit de faire mieux pour d'en passer
    Pour les ressources consommées, je ne peux te répondre. Mais si les ressources mobilisées sont importantes car les timers sont nombreux, il faut pê en réduire le nombre en les regroupant. Dans l'événement commun, compter le nombre de pas (= de fois l'intervalle PGCD), et selon ce nombre, déclencher telle et/ou telle procédure.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    La question qui me vient concerne l'utilité des Timers. S'ils sont mis en place pour pallier un défaut de conception, il suffit de faire mieux pour d'en passer
    +1

    Il me semble qu'il y avait une limite maximum de Timer actifs en même temps. Je ne sais pas si c'est toujours d'actualité ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    On peut aussi utiliser un seul Timer et gérer manuellement la périodicité de chaque intervalle
    Tu peux même utiliser un TThread, tout ce qui ne manipulent pas la VCL n'impacte pas l'expérience utilisateur et ce qui manipulent la VCL peut se faire via un PostMessage
    Ainsi tu gères ta propre file d'ordonnancement

    Mais à part, une interaction avec du matériel nécessitant un polling, du Refresh de données ou cas extrême d'animation graphique
    c'est bien les seuls cas ou un Timer peut être nécessaire !
    Donc comme les autres, vérifie l'utilité de tes Timer !

    Regarde aussi OnIdle du TApplication[Events], c'est déclencher quand l'application ne fait rien,
    c'est aussi l'occasion pour déclencher des taches de fond, idem tu peux gérer un délai entre chaque lancement (le OnIdle est très fréquent)

    Avec les machines actuelles, atteindre les limites de leur capacité devient difficiles
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    La question qui me vient concerne l'utilité des Timers. S'ils sont mis en place pour pallier un défaut de conception...
    Je ne vois toutefois pas en quoi avoir un timer (alarme), dans lequel j'ai une multitude de tests et de variables afin d'aiguillonner des sous programmes serait une bonne conception. Meilleure en tout cas qu'une multitude d'alarmes avec des procédures simples et dédiées surtout si la dépense de ressource est négligeable.

    Citation Envoyé par ShaiLeTroll Voir le message
    On peut aussi utiliser un seul Timer et gérer manuellement la périodicité de chaque intervalle
    Tu peux même utiliser un TThread, tout ce qui ne manipulent pas la VCL n'impacte pas l'expérience utilisateur et ce qui manipulent la VCL peut se faire via un PostMessage
    Ainsi tu gères ta propre file d'ordonnancement
    Je vais y jetter un oeil

    Citation Envoyé par ShaiLeTroll Voir le message
    Mais à part, une interaction avec du matériel nécessitant un polling, du Refresh de données ou cas extrême d'animation graphique
    c'est bien les seuls cas ou un Timer peut être nécessaire !
    Données internet, ou fichiers... Pour les fichiers, j'ai déjà utilisé des événements, mais parfois ça passait à coté de modification de fichier, alors par exemple je lis régulièrement l'âge du fichier pour savoir si il vient d'être modifié.

    Citation Envoyé par ShaiLeTroll Voir le message
    Regarde aussi OnIdle du TApplication[Events], c'est déclencher quand l'application ne fait rien,
    c'est aussi l'occasion pour déclencher des taches de fond, idem tu peux gérer un délai entre chaque lancement (le OnIdle est très fréquent)
    Ça aussi ça semble intéressant.
    Citation Envoyé par ShaiLeTroll Voir le message
    Avec les machines actuelles, atteindre les limites de leur capacité devient difficiles
    Ça c'est certain, l'optimisation est utile si la dépense de temps est supérieure au coût de la machine. Bosch a travaillé pendant longtemps sur une suspension électronique. Quand ils ont commencé le projet, les ingénieurs savaient que les ordinateurs abordables pouvant faire le traitement n’existaient pas encore, mais en développement la technologie, ils ont pu passer à la mise en marché dès que les ordinateurs avec assez de puissance sont devenus abordables.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Citation Envoyé par sgmsg Voir le message
    Je ne vois toutefois pas en quoi avoir un timer (alarme), dans lequel j'ai une multitude de tests et de variables afin d'aiguillonner des sous programmes serait une bonne conception. Meilleure en tout cas qu'une multitude d'alarmes avec des procédures simples et dédiées surtout si la dépense de ressource est négligeable.
    Les ressources peuvent être négligeables mais pas forcément la consommation. Une multitude de timers peut empêcher le processeur de passer en mode idle ou le faire sortir de ce mode trop fréquemment.
    Avoir un timer à 1s incluant 10 tests sera moins énergivore que dix timers simplement parce que la sortie de veille consomme plus qu'en utilisation normale, cela peut même entraîner une surconsommation si la veille est très courte.

    Mais on parle bien de timers démarrés, un composant TTimer désactivé posé sur une fiche ne consomme rien.

    Des améliorations ont d'ailleurs été apportées à ce sujet depuis Win7, SetWaitableTimerEx (que je n'ai jamais utilisé) à un paramètre "tolérance" (TolerableDelay) qui permet de retarder et regrouper les événements proches et ainsi de conserver le CPU plus longtemps en veille.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Les ressources peuvent être négligeables mais pas forcément la consommation. Une multitude de timers peut empêcher le processeur de passer en mode idle ou le faire sortir de ce mode trop fréquemment.
    Avoir un timer à 1s incluant 10 tests sera moins énergivore que dix timers simplement parce que la sortie de veille consomme plus qu'en utilisation normale, cela peut même entraîner une surconsommation si la veille est très courte.

    Mais on parle bien de timers démarrés, un composant TTimer désactivé posé sur une fiche ne consomme rien.

    Des améliorations ont d'ailleurs été apportées à ce sujet depuis Win7, SetWaitableTimerEx (que je n'ai jamais utilisé) à un paramètre "tolérance" (TolerableDelay) qui permet de retarder et regrouper les événements proches et ainsi de conserver le CPU plus longtemps en veille.
    Selon wikipédia une ressource peut être entre autre

    1. En informatique, les ressources sont des composants, matériels ou logiciels, connectés à un ordinateur ;
    2. Tout composant de système interne est une ressource ;
    3. Les ressources d'un système virtuel incluent les fichiers, les connexions au réseau, et les zones de mémoire ;
    4. Un élément d'intérêt pour un internaute et qui est disponible dans un des sites Internet du réseau ;
    5. Une ressource Internet peut être un système de recherche (Gopher, Web),
    6. Un navigateur Web, une base de données accessible par FTP ;
    7. Même un correspondant lors d'une session de dialogue en direct ;
    8. Du temps processeur ;
    9. De la mémoire vive ou virtuelle ;
    10. De l'espace du disque dur ;
    11. Un périphérique externe ;
    12. le throughput d'un réseau.



    Vous avez donc répondu à ma question.

    Merci beaucoup à tous

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Non ici une ressource est "quelque chose" donné / crée par Windows. Comme les mutex

    Et j'avais lu "je-ne-sais-plus-où" que Windows a un nombre de timers limité


    Trouvé: sur le site Embarcadero
    Warning: Limitations on the total number of timers system-wide are system-dependent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Logique pour manipuler des timer
    Par Phoenix07 dans le forum C#
    Réponses: 3
    Dernier message: 11/04/2013, 16h25
  2. Réponses: 6
    Dernier message: 18/04/2012, 16h27
  3. Biblio <ctime> pour des timers
    Par syl1405 dans le forum C++
    Réponses: 7
    Dernier message: 21/07/2010, 10h35
  4. La bonne méthode pour faire des timers
    Par Tigrounette dans le forum Général Java
    Réponses: 10
    Dernier message: 19/07/2008, 22h35
  5. package ambiguïté pour des classes de même nom
    Par soad dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2004, 19h25

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