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 :

[Delphi 7] Array contre integer


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut [Delphi 7] Array contre integer
    Bonjour

    Voilà, je tente d'optimiser mon code et au fur et à mesure que j'avance en connaissance et donc en pratique, je souhaite toujours faire mieux...

    Bref, présentement j'ai un progr comportant environ 500 variables en integer, réparties en blocs de 13 variables.

    J'ai commencé (en maquette de brouillon) avec succès à modifier toutes cette architecture contre des tableaux.

    Au lieu d'avoir des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    L1CA, L2CA, L3CA, L4CA, L5CA, L6CA, L7CA, L8CA, L9CA, L10CA, L11CA, L12CA, L13CA,
    ...
    Je me dirige vers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    CA: array[0..12] of byte; 
    ...
    Ma question est simple : suis-je tourné vers le bon chemin ?

    Sachant que chaque variable en integer, comporte au maximum trois chiffres (de zéro à neuf).

    Est-ce une solution fiable, plus performante, moins lourde en ressources que celle en integer ?

    Car... sur Windows 98, ce paquet de 500 variables fait superbement baisser les GDI !

    Merci d'avance de vos reflexions éclairées.

    jp

  2. #2
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut
    Déclare plutot le type tableau en integer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ca  : Array[1..12] Of Integer;
    Le code sera beaucoup plus performant. Le systeme fonctionne en 32 bit. Le type générique de base est un entier sur 32 bit, le type Integer. Pour utiliser un type Byte (qui a été conservé pour raison de compatibilité ascendante), le compilateur doit convertir la variable. D'où une perte de performances. Mais, l'aide de DELPHI l'explique mieux que moi.
    Cherche l'aide sur le type integer.

  3. #3
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    De toutes façons, 999 n'entre pas dans un byte (0..255).

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par J-P
    Est-ce une solution fiable, plus performante, moins lourde en ressources que celle en integer ?
    Fiable... Oui, je vois pas pourquoi pas
    Plus performante : Non, ce sera même moins performant, puisqu'il faudra une instruction de plus pour calculer l'adresse de chaque valeur (à moins que le compilo n'optimise l'accès si l'index est constant )
    Moins lourde en ressources : absolument pas, c'est équivalent.

    Citation Envoyé par J-P
    Car... sur Windows 98, ce paquet de 500 variables fait superbement baisser les GDI !
    Je parie tout ce que tu veux que ce ne sont pas ces 500 entiers qui baissent ton GDI... Mais autre chose dans ton programme
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour et merci à tous de vos réponses

    Philippe Gormand a écrit :
    Par défaut
    Déclare plutot le type tableau en integer.

    Code :
    ca : Array[1..12] Of Integer;

    Le code sera beaucoup plus performant. Le systeme fonctionne en 32 bit. Le type générique de base est un entier sur 32 bit, le type Integer. Pour utiliser un type Byte (qui a été conservé pour raison de compatibilité ascendante), le compilateur doit convertir la variable. D'où une perte de performances. Mais, l'aide de DELPHI l'explique mieux que moi.
    Cherche l'aide sur le type integer.
    Oki, en effet ici même j'avais déjà eu pareil conseil que le Byte en 32bit consommait autant de ressources qu'un integer.
    Mais question tableau je ne savais pas que c'était idem ; désormais je le sais clairement.
    Super pour la déclar idem en integer, je vais l'appliquer et replonger dans l'aide un coup.



    slimjoe a écrit :
    Par défaut
    De toutes façons, 999 n'entre pas dans un byte (0..255).
    Oui, oui oupssss c'est vrai, mais mon programme ne permet pas de gérer cette grande valeur max. Quoique oupsss en OnKey j'ai pas limité... Bon à prendre aussi



    sjrd a écrit :
    J-P a écrit :
    Est-ce une solution fiable, plus performante, moins lourde en ressources que celle en integer ?
    Fiable... Oui, je vois pas pourquoi pas
    Plus performante : Non, ce sera même moins performant, puisqu'il faudra une instruction de plus pour calculer l'adresse de chaque valeur (à moins que le compilo n'optimise l'accès si l'index est constant )
    Moins lourde en ressources : absolument pas, c'est équivalent.

    Citation:
    J-P a écrit :
    Car... sur Windows 98, ce paquet de 500 variables fait superbement baisser les GDI !
    Je parie tout ce que tu veux que ce ne sont pas ces 500 entiers qui baissent ton GDI... Mais autre chose dans ton programme
    Là, moi qui pensais que j'allais faire un "mieux"
    Je ne sais plus alors si j'ai intérêt à tout remanier alors ces 500 variables en tableau... ?

    Ceci dit, en effet, question ressources, ce n'est pas le total des autres variables ; surtout des tas de strings que j'ai limité au possible en string[x], mais sans parler de la gestion du skin, très très lourd (sauf sur XP).

    Encore merci à tous, je vois plus clair, mais ne sais plus si cela vaut la peine que je me tourne en ce cas précis pour les tableaux.


  6. #6
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    utilise plutot le type word c'est tes valeur sont toutes positives


    help de delphi
    Type Etendue Format
    Shortint -128..127 8 bits signé
    Smallint -32768..32767 16 bits signé
    Longint -2147483648..2147483647 32 bits signé
    Int64 -2^63..2^63-1 64 bits signé
    Byte 0..255 8 bits non signé
    Word 0..65535 16 bits non signé
    Longword 0..4294967295 32 bits non signé

  7. #7
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Merci aityahia pour ton complément, oui en effet bonne idée je pense.

    Ceci dit, avant que je ne clique sur le bouton "Résolu" ou "Délestage", je ne vois pas alors, après lecture des messages dito, les avantages de la mise en tableau de mes variables integer ?

    Surtout si cette tournure de programmation est moins performante et autant coúteuse en ressources...

    Les Arrays gadget de programmation ?

    Oui je provoque un peu, mais avouez qu'il y a de quoi devenir Père Plex, non ?


  8. #8
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    je ne vois pas alors, après lecture des messages dito, les avantages de la mise en tableau de mes variables integer ?
    Si les variables L1CA, L2CA, L3CA, L4CA ... n'ont rien à voir entre elles et qu'elles sont utilisées indépendamment les unes des autres, on ne gagne rien.

    Toutefois si, comme c'est probable, il y a des procédures pouvant traiter ces variables dans une boucle par exemple pour les initialiser toutes à zéros ou pour les lire dans un fichier, les sauvegarder dans un fichier, les visualiser dans un tableau ..., le gain est clair et on pourra augmenter le nombre de variable très simplement.

    Par exemple, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L1CA:=0 ;
    L2CA:=0 ;
    L3CA:=0 ; 
    ...
    on ecrira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=1 to 12 do CA[i]:=0 ;

  9. #9
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Citation Envoyé par J-P
    Les Arrays gadget de programmation ?
    À ce compte là, on pourrait dire qu'une chaîne de caractère est aussi un gadget. Et les paramètres par référence aussi tant qu'à y être (quand c'est si convivial d'utiliser des pointeurs). Et les propriétés ? Et les composants visuels ?

    Non non, tant qu'à chercher des gadget, autant les débusquer pour vrai. Toute forme de variable est un gadget.

    Et on devrait tous coder uniquement en assembleur via bloc-note.

    Ah et puis non : directement en binaire.

    ***

    Désolé je m'emporte .

    Je comprend ta question J-P et je suis d'accord avec le fait qu'il faut provoquer pour créer le débat. En fait, ça dépend de ce que tu veux dire par gadget. Ma définition tourne autour de ce qui est inutile, superflu et accessoire et je ne crois pas que les tableaux soient accessoires.

    Tout d'abord, c'est pratique de pouvoir ajuster un tableau dynamiquement quand on ne connais pas le nombre de variables dont on aura besoin à l'exécution. Ensuite, même si ce nombre de variables est fixe, je trouve pratique de les mettre en tableau parce que si ce nombre change, j'aurai peu de code à modifier. Enfin, les valeurs d'un tableau sont contiguës en mémoire ce qui accélère l'accès à ces dernieres si j'ai besoin d'accéder à toutes mes variables à peu près en même temps.

    Voilà!

    Bon dev!!

Discussions similaires

  1. [PDO] Convertir un Array en integer
    Par bobo27110 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/05/2012, 12h12
  2. Comment mettre aucune valeur dans Array of integer?
    Par Ardely dans le forum Langage
    Réponses: 10
    Dernier message: 02/08/2007, 18h15
  3. Réponses: 4
    Dernier message: 20/05/2007, 18h14
  4. Réponses: 4
    Dernier message: 29/12/2005, 17h51
  5. [Delphi 7] Transtypage d'un pointer objet vers un integer
    Par raoulmania dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h28

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