| Test de SearchStringList. | |
|
|
Auteur | Message |
---|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Test de SearchStringList. Dim 3 Fév 2019 - 17:44 | |
| Bonjour. @Klaus. La durée d'exécution est de 0,781 sec pour 10 boucles. Donc environ 7,8 sec pour 100 recherches. Un progrès est-il encore possible, stp ? Merci de la suite. - Code:
-
dll_on "kgf"
dim debut, k%, res%, b$, f$, te$
te$=" ": ' string$(255," ")
f$="dico_français_espagnol.txt"
res%=dll_call2("CreateStringList",2,0) if res%=0 then res%=dll_call2("LoadStringList",2,adr(f$))
debut=number_ticks
chercher()
' 0,782 sec. message str$(number_ticks-debut) terminate sub chercher() for k%=1 to 10 b$="le mois prochain;loc;" res%=dll_call3("SearchStringList",2,adr(b$),adr(te$)) next k% end_sub | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Test de SearchStringList. Dim 3 Fév 2019 - 18:31 | |
| Dans cet exemple, ce qui est évident, c'est qu'il faut sortir le chargement de la variable b$ de la boucle. Le gain est non négligeable: - Code:
-
dll_on "kgf"
dim debut, k%, res%, b$, f$, te$
te$=" ": ' string$(255," ")
f$="dico_français_espagnol.txt"
res%=dll_call2("CreateStringList",2,0) if res%=0 then res%=dll_call2("LoadStringList",2,adr(f$))
b$="le mois prochain;loc;" debut=number_ticks
chercher()
' 0,782 sec. message str$(number_ticks-debut) terminate sub chercher() for k%=1 to 10 ' b$="le mois prochain;loc;" res%=dll_call3("SearchStringList",2,adr(b$),adr(te$)) next k% end_sub Maintenant, je pense que ta question portait surtout sur la fonction SearchStringList. Je vais y regarder de plus près... | |
|
| |
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Test de SearchStringList. Dim 3 Fév 2019 - 20:45 | |
| Bonsoir.
En fait, la variable b$ ne contient pas de chaine constante. C'est pour cette raison que je l'ai laissée dans la boucle.
Je cherche à améliorer la vitesse de traitement de la fonction SearchStringList.
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Test de SearchStringList. Dim 3 Fév 2019 - 20:59 | |
| Je m'en doutais bien... Je vais regarder cela. Mais la routine est complexe, et ça prendra un peu de temps. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Test de SearchStringList. Lun 4 Fév 2019 - 13:40 | |
| Problème résolu.
En fait, ça ne vient pas de la fonction de recherche. Ca vient du mode de création de la StringList. Tu la crées en mode 0 ce qui signifie "non triée". Ce sera nettement plus performant en mode 1 ou 2.
Chez moi, j'obtiens les chiffres suivante: mode 0: 2953 mode 1: 156 mode 2: 188
Spectacilaire, non ? | |
|
| |
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Test de SearchStringList. Lun 4 Fév 2019 - 13:53 | |
| Bonjour. Oui, spectaculaire en effet. J'obtiens maintenant un score de 62 pour 1000 recherches !! Bravo ! Mais pourquoi res% est-il négatif ? Ce qui oblige à en prendre ensuite la valeur absolue. - Code:
-
dll_on "kgf"
dim debut, k%, res%, b$, e$, f$, te$, y%
te$=" ": ' string$(255," ")
f$="dico_français_espagnol.txt"
debut=number_ticks
res%=dll_call2("CreateStringList",2,2) if res%=0 then res%=dll_call2("LoadStringList",2,adr(f$))
message str$(number_ticks-debut)
debut=number_ticks
chercher()
' 0,782 sec. message str$(number_ticks-debut)+": "+str$(res%)
res%=abs(res%) e$=string$(255," ") y%=dll_call3("ReadStringList",2,res%,adr(e$)) message trim$(e$)
terminate sub chercher() for k%=1 to 1000 b$="ôter quelque chose à quelqu'un;" res%=dll_call3("SearchStringList",2,adr(b$),adr(te$)) next k% end_sub | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Test de SearchStringList. Lun 4 Fév 2019 - 14:43 | |
| Voici ce que dit l'aide de cette fonction: - Citation :
res% ind% si réussite: indice le l'élément retourné -ind% si liste triée et enregistrement exact inexistant: indice devant lequel il faut insérer 0 si erreur
Donc, ça veut dire que la réponse trouvée n'est pas la réponse exacte mais la plus proche possible. En tout cas, c'est la ligne devant laquelle il faudrait insérer une ligne avec le critère de recherche exact pour respecter la séquence de tri. | |
|
| |
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Test de SearchStringList. Lun 4 Fév 2019 - 20:16 | |
| Bonsoir.
Merci pour l'info Klaus.
Donc, si l'élément trouvé correspond en partie à l'élément recherché, res% doit être négatif ! | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Test de SearchStringList. Lun 4 Fév 2019 - 20:46 | |
| Oui, c'est cela. S'il y a identité, le résultat est positif. Si le critère n'est pas trouvé, c'est zéro. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Test de SearchStringList. | |
| |
|
| |
| Test de SearchStringList. | |
|