1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 974
    Points : 10 678
    Points
    10 678
    Billets dans le blog
    4

    Par défaut Mesurer le temps d'exécution d'une procédure

    Bonjour ! Y aurait-il un moyen de mesurer le temps d'exécution d'une procédure ?

    Je sais qu'on peut obtenir l'heure à la milliseconde près, mais étant donné les conditions dans lesquelles s'exécute une animation Flash, on ne peut pas lancer des tâches trop longues. Donc comment feriez-vous, si vous aviez besoin de savoir laquelle de deux procédures est la plus rapide ?

    Voici un cas sur lequel je me suis posé la question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    (* Flash-Pascal 2 v13.11.10 *)
     
    program EnleveAccents1;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VERSION = 'Compilateur FlashPascal 2 v13.11.10'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      AvecAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      SansAccents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
     
    function EnleveAccents(aChaine: string): string;
    var
      i, j: Integer;
    begin
      Result := '';
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          Result := Result + SansAccents[j]
        else
          Result := Result + aChaine[i];
      end;
    end;
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      s := EnleveAccents("aàeéè");
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VERSION + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VERSION)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    (* Flash-Pascal 2 v13.11.10 *)
     
    program EnleveAccents2;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VERSION = 'Compilateur FlashPascal 2 v13.11.10'#13;
     
    var
      t: TextField;
      f: TextFormat;
      s: string;
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      AvecAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      SansAccents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
     
    function EnleveAccents(aChaine: string): string;
    var
      i, j: Integer;
    begin
      Result := aChaine;
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          Result[i] := SansAccents[j];
      end;
    end;
     
    begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      s := EnleveAccents("aàeéè");
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VERSION + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VERSION)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 711
    Points : 21 380
    Points
    21 380

    Par défaut

    ben tu prend l'heure avant et après l'appel à la procédure et tu as le temps d'exécution

    tu peux tester aussi quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function accents(str: string): string;
    var
      i: Integer;
      c: string;
    begin
      Result := '';
      for i := 1 to Length(str) do
      begin
        c := Str[i];
        case c of
          "à", "â": c := 'a';
        end;
        Result := Result + c;
      end;
    end;
    note que "c" est un String et non un Char car "à" c'est de l'UTF8 et ça ne tient pas sur 1 caractère
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 974
    Points : 10 678
    Points
    10 678
    Billets dans le blog
    4

    Par défaut

    Merci, Paul ! Voici le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    (* Flash-Pascal 2 v13.11.10 *)
     
    program Comparaison;
     
    (* Comparaison de la vitesse d'exécution de plusieurs fonctions renvoyant une
       chaîne de caractères sans accents. *)
     
    uses
      Flash8, Date;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
     
    function Time: integer; (* Heure en millisecondes *)
    begin
      with tDate.Create do
        result :=
        60 * 60 * 1000 * GetHours +
             60 * 1000 * GetMinutes +
                  1000 * GetSeconds +
                     1 * GetMilliseconds;
    end;
     
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      AvecAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      SansAccents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
     
    function EnleveAccents1(aChaine: string): string;
    var
      i, j: integer;
    begin
      result := '';
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          result := result + SansAccents[j]
        else
          result := result + aChaine[i];
      end;
    end;
     
    function EnleveAccents2(aChaine: string): string;
    var
      i, j: integer;
    begin
      result := aChaine;
      for i := 1 to Length(aChaine) do
      begin
        j := Pos(aChaine[i], AvecAccents);
        if j > 0 then
          result[i] := SansAccents[j];
      end;
    end;
     
    function EnleveAccents3(aChaine: string): string;
    var
      i: integer;
      c: string;
    begin
      result := '';
      for i := 1 to Length(aChaine) do
      begin
        c := aChaine[i];
        case c of
          "À", "Á", "Â", "Ã", "Ä", "Å": c := 'A';
          "à", "á", "â", "ã", "ä", "å": c := 'a';
          "Ò", "Ó", "Ô", "Õ", "Ö", "Ø": c := 'O';
          "ò", "ó", "ô", "õ", "ö", "ø": c := 'o';
          "È", "É", "Ê", "Ë": c := 'E';
          "è", "é", "ê", "ë": c := 'e';
          "Ç": c := 'C';
          "ç": c := 'c';
          "Ì", "Í", "Î", "Ï": c := 'I';
          "ì", "í", "î", "ï": c := 'i';
          "Ù", "Ú", "Û", "Ü": c := 'U';
          "ù", "ú", "û", "ü": c := 'u';
          "ÿ": c := 'y';
          "Ñ": c := 'N';
          "ñ": c := 'n';
        end;
        result := result + c;
      end;
    end;
     
    function EnleveAccents4(aChaine: string): string;
    var
      i: integer;
      c: string;
    begin
      result := aChaine;
      for i := 1 to Length(aChaine) do
      begin
        c := aChaine[i];
        case c of
          "À", "Á", "Â", "Ã", "Ä", "Å": result[i] := 'A';
          "à", "á", "â", "ã", "ä", "å": result[i] := 'a';
          "Ò", "Ó", "Ô", "Õ", "Ö", "Ø": result[i] := 'O';
          "ò", "ó", "ô", "õ", "ö", "ø": result[i] := 'o';
          "È", "É", "Ê", "Ë": result[i] := 'E';
          "è", "é", "ê", "ë": result[i] := 'e';
          "Ç": result[i] := 'C';
          "ç": result[i] := 'c';
          "Ì", "Í", "Î", "Ï": result[i] := 'I';
          "ì", "í", "î", "ï": result[i] := 'i';
          "Ù", "Ú", "Û", "Ü": result[i] := 'U';
          "ù", "ú", "û", "ü": result[i] := 'u';
          "ÿ": result[i] := 'y';
          "Ñ": result[i] := 'N';
          "ñ": result[i] := 'n';
        end;
      end;
    end;
     
    ////////////////////////////////////////////////////////////////////////////////
     
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VERSION = 'Compilateur FlashPascal 2 v13.11.10'#13;
      TEXTE =
      "La vraie perfection de l'entendement est de bien juger."#10 +
      "Juger, c'est prononcer au dedans de soi sur le vrai et sur le faux ; et bien juger, c'est  prononcer avec raison et connaissance."#10 +
      "C'est une partie de bien juger que de douter quand il faut. Celui qui juge certain ce qui est certain, et douteux ce qui est douteux, est un bon juge."#10 +
      "Par le bon jugement on se peut exempter de toute erreur. Car on évite l'erreur non seulement en embrassant la vérité quand elle est claire, mais encore en se retenant quand elle ne l'est pas."#10 +
      "Ainsi la vraie règle de bien juger est de ne juger que quand on voit clair ; et le moyen de le faire est de juger après une grande considération."#10 +
      "Considérer une chose, c'est arrêter son esprit à la regarder en elle-même, en peser toutes les raisons, toutes les difficultés et tous les inconvénients."#10 +
      "C'est ce qui s'appelle attention. C'est elle qui rend les hommes graves, sérieux, prudents, capables de grandes affaires et de hautes spéculations."#10 +
      "Être attentif à un objet, c'est l'envisager de tous côtés ; et celui qui ne le regarde que du côté qui le flatte, quelque long que soit le temps qu'il emploie à le considérer, n'est pas vraiment attentif."#10 +
      "C'est autre chose d'être attaché à un objet, autre chose d'y être attentif. Y être attaché, c'est vouloir, à quelque prix que ce soit, lui donner ses pensées et ses désirs, ce qui fait qu'on ne le regarde que du côté agréable ; mais y être attentif, c'est vouloir le considérer pour en bien juger, et pour cela connaître le pour et le contre."#10 +
      "Il y a une sorte d'attention après que la vérité est connue ; et c'est plutôt une attention d'amour et de complaisance que d'examen et de recherche."#10 +
      "La cause de mal juger est l'inconsidération, qu'on appelle autrement précipitation."#10 +
      "Précipiter son jugement, c'est croire ou juger avant que d'avoir connu."#10 +
      "Cela nous arrive, ou par orgueil, ou par impatience, ou par prévention, qu'on appelle autrement préoccupation :"#10 +
      "Par orgueil, parce que l'orgueil nous fait présumer que nous connaissons aisément les choses les plus difficiles, et presque sans examen : ainsi nous jugeons trop vite, et nous nous attachons à notre sens, sans vouloir jamais revenir, de peur d'être forcés à reconnaître que nous nous sommes trompés ;"#10 +
      "Par impatience, lorsqu'étant las de considérer, nous jugeons avant que d'avoir tout vu ;"#10 +
      "Par prévention en deux manières : ou par le dehors, ou par le dedans*:"#10 +
      "Par le dehors, quand nous croyons trop facilement sur le rapport d'autrui, sans songer qu'il peut nous tromper, ou être trompé lui-même*;"#10 +
      "Par le dedans, quand nous nous trouvons portés, sans raison, à croire une chose plutôt qu'une autre."#10 +
      "Le plus grand déréglement de l'esprit, c'est de croire les choses parce qu'on veut qu'elles soient, et non parce qu'on a vu qu'elles sont en effet."#10 +
      "C'est la faute où nos passions nous font tomber. Nous sommes portés à croire ce que nous désirons et ce que nous espérons, soit qu'il soit vrai, soit qu'il ne le soit pas."#10 +
      "Quand nous craignons quelque chose, souvent nous ne voulons pas croire qu'elle arrive ; et souvent aussi, par faiblesse, nous croyons trop facilement qu'elle arrivera."#10 +
      "Celui qui est en colère en croit toujours les causes justes, sans même vouloir les examiner ; et par là il est hors d'état de porter un jugement droit."#10 +
      "Cette séduction des passions s'étend bien loin dans la vie, tant à cause que les objets qui se présentent sans cesse nous en causent toujours quelques unes, qu'à cause que notre humeur même nous attache naturellement à de certaines passions particulières, que nous trouverions partout dans notre conduite si nous savions nous observer."#10 +
      "Et comme nous voulons toujours plier la raison à nos désirs, nous appelons raison ce qui est conforme à notre humeur naturelle, c'est-à-dire à une passion secrète qui se fait d'autant moins sentir qu'elle fait comme le fond de notre nature."#10 +
      "C'est pour cela que nous avons dit que le plus grand mal des passions, c'est qu'elles nous empêchent de bien raisonner, et par conséquent de bien juger, parce que le bon jugement est l'effet du bon raisonnement.";
     
    (* BOSSUET, Traité de la connaissance de Dieu et de soi-même. *)
     
    var
      t: textField;
      f: textFormat;
      o: string;
      s: string;
      t1, t2: integer;
     
    begin
      f := textFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := textField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
     
      o := '';
     
      t1 := Time;
      s := EnleveAccents1(TEXTE);
      t2 := Time;
      o := o + 'Version 1 : ' + IntToStr(t2 - t1) + ' ms'#10;
     
      t1 := Time;
      s := EnleveAccents2(TEXTE);
      t2 := Time;
      o := o + 'Version 2 : ' + IntToStr(t2 - t1) + ' ms'#10;
     
      t1 := Time;
      s := EnleveAccents3(TEXTE);
      t2 := Time;
      o := o + 'Version 3 : ' + IntToStr(t2 - t1) + ' ms'#10;
     
      t1 := Time;
      s := EnleveAccents4(TEXTE);
      t2 := Time;
      o := o + 'Version 4 : ' + IntToStr(t2 - t1) + ' ms';
     
      t.text := VERSION + o;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VERSION)-1, f);
    end.
    C'est instructif, parce que quand tu avais introduit dans FlashPascal la possibilité de modifier un caractère d'une chaîne, tu avais dit (si je me souviens bien) que ce serait une rustine. Apparemment la rustine a été bien faite, puisque les deux fonctions qui modifient la chaîne caractère par caractère (au lieu de la composer par assemblage) sont plus rapides que les autres.

    Images attachées Images attachées  

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 711
    Points : 21 380
    Points
    21 380

    Par défaut

    ah oui c'est amusant ça...s[i] := 'a' donne en gros s := copy(s, 1, i - 1) + 'a' + copy(s, i + 1 , length(s));...que je supposais pas très efficace
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

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

Discussions similaires

  1. Mesurer le temps d'exécution d'une fonction.
    Par Luke spywoker dans le forum Débuter
    Réponses: 3
    Dernier message: 03/02/2015, 10h55
  2. Temps d'exécution pour une procédure stockée PL/SQL Oracle 9
    Par strompakha dans le forum Administration
    Réponses: 3
    Dernier message: 18/05/2010, 14h09
  3. Calculer le temps d'exécution d'une procédure
    Par fring dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/05/2008, 18h53
  4. mesurer le temps d'exécution d'une fonction
    Par Fonzy007 dans le forum C
    Réponses: 12
    Dernier message: 28/12/2006, 17h27

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