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

Langage Delphi Discussion :

[Optimisation] Lequel est le plus rapide ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut [Optimisation] Lequel est le plus rapide ?
    Bonjour a tous,
    J'ai un petit bout de code qui m'intrigue,

    voici donc l'exemple n°1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sum:=SCANINI.ReadInteger('File0','Sum',0);
          for I:=1 to Sum do begin
                { code a executer }
          end;
    et voici l'exemple n°2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for I:=1 to SCANINI.ReadInteger('File0','Sum',0) do begin
          { code a executer }
    end;
    A votre avis lequel de ces exemple est le plus performant au niveau ressource !?
    Moi je dirait l'exemple n°1, parcequ'ont n'accéde a l'objet TIniFile qu'une seule fois, mais j'aimerais avoir l'avis d'un expert !

    Merci pour vos reponse !

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    ben je veux pas prétendre au tifre d'expert mais je suis certain que c'est l'exemple 1 le plus optimisé, car accès une seule fois à l'objet et à sa méthode, une seule évaluation des paramètres, une seule lecture dans l'inifile.

    @++
    Dany

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Salut,

    Je suis tout à fait d'accord avec vous dans le second cas, la fonction est appelé à chaque fois. En plus le premier exemple donne exactement le même réésultat. Non moi j'opte sans nul doute possible pour le remier code....

    Bonne prog

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Ok, je vois donc que je me fesait une bonne idée de la chose,

    merci !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    C'est la même chose, les bornes de la boucle ne sont calculées qu'une seule fois.

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Cela voudrait dire que le passage a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for I:=1 to SCANINI.ReadInteger('File0','Sum',0) do begin
    est executer 1 seul fois ?

  7. #7
    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 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    je pense au contraire que l'évaluation n'est faite qu'avant la boucle, une seule fois, donc !

    la preuve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s := 'et de 7';
    for i := 1 to Length(S) do S := s+IntToStr(i);
    ShowMessage(s);
    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 !

  8. #8
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Alors si j'ai bien compris cette ligne est executer autant de fois que necessaire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for I:=1 to SCANINI.ReadInteger('File0','Sum',0) do begin
    mais l'evaluation de SCANINI et faite seulement au debut de la boucle, dans ce cas les 2 exemple sont identique !?

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Oui c'est vrai, je me suis avancé un peu trop vite...

    A plus

  10. #10
    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 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    tes 2 exemples sont identiques en nombre de fois où l'évaluation est faite : un seul appel à la fonction ScanIni() ;
    la seconde version élimine une variable, donc est plus économique, voire rapide, si cette valeur sum n'est utile nulle part ailleurs.
    d'ailleurs, dans la mesure où elle ne sert pas, va savoir si le compilo ne simplifie pas 1) en 2) ???
    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 !

  11. #11
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    oui effectivement dans le cas d'une boucle for cela revient au même. Mais ce n'est pas vrai sur une boucle while par exemple.

    @++
    Dany

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2007, 16h53
  2. Apache 1.3 et 2 , lequel est le plus rapide ?
    Par a028762 dans le forum Apache
    Réponses: 3
    Dernier message: 15/05/2006, 11h33
  3. [Copie de Fichier] Quelle méthode est la plus rapide ?
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 04/05/2006, 13h59
  4. int vs double: qui est le plus rapide?
    Par Chewbi dans le forum C++
    Réponses: 23
    Dernier message: 25/03/2006, 02h58
  5. [StringGrid - DrawGrid] Lequel est le plus performant ?
    Par xenos dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/01/2006, 18h09

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