Pour convertir des caractères ISO8859 (et consor), que connaissez-vous
de plus efficace ? La taille prise en mémoire semble importante.
Voilà ce que j'ai derrière la tête : j'ai écrit un petit client mail
pour savoir rapidement si j'ai reçu des mails, sans avoir à charger
Eudora ou Mozilla. Mais voilà, ça ne me plaisait pas du tout du tout de
voir dans les sujets des messages, voire les noms des expéditeurs, des
décorations du genre ISO8859-1?=?, alors j'ai écrit ma moulinette pour
décoder tout ça, à force d'en ajouter ça finit par être assez efficace,
seulement d'un autre côté, à force d'en ajouter il faut y mettre de la
bonne volonté pour dire que ça se charge plus vite que Eudora ou Mozilla.
J'aurais cru que les "grands" logiciels de mails étaient lourds surtout
parce qu'ils gèrent des fichiers et des capacités de tri, ce dont on n'a
rien à faire dans un client "léger", mais apparemment, le décodage des
caractères accentués prend une importance que j'avais sous-évaluée.
Je n'ai rien vu de tout prêt dans les API, mais peut-être ma doc
n'est-elle pas complète ?
Bonjour Gloops, Pour compléter tout ce qui a été dit, il me semble que tu fais fausse route. Ton exemple fonctionne probablement bien avec les caractères courants tels que le é, mais avec l'euro par exemple cela ne va pas donner le résultat escompté. Peut-être que cela n'a pas grand importance, mais je t'indique ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou Binary64. Mais le code qui suit les séquences d'échappement est justement le code du caractère dans le jeu spécifié. Or pour certains caractères (heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par contre, la séquence d'octets correspondants aux caractères peut être interprétée différemment selon l'encodage figurant dans l'en-tête MIME. Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe OE6. Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y trouver ton bonheur. http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:43479262$0$27434$8fcfb975@news.wanadoo.fr,
Gloops disait :
Bonjour tout le monde,
Bonjour Gloops,
Pour compléter tout ce qui a été dit, il me semble que tu fais fausse
route.
Ton exemple fonctionne probablement bien avec les caractères courants
tels que le é, mais avec l'euro par exemple cela ne va pas donner le
résultat escompté.
Peut-être que cela n'a pas grand importance, mais je t'indique
ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou
Binary64.
Mais le code qui suit les séquences d'échappement est justement le code
du caractère dans le jeu spécifié. Or pour certains caractères
(heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou
Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont
autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par
contre, la séquence d'octets correspondants aux caractères peut être
interprétée différemment selon l'encodage figurant dans l'en-tête MIME.
Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis
des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe
OE6.
Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y
trouver ton bonheur.
http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
Bonjour Gloops, Pour compléter tout ce qui a été dit, il me semble que tu fais fausse route. Ton exemple fonctionne probablement bien avec les caractères courants tels que le é, mais avec l'euro par exemple cela ne va pas donner le résultat escompté. Peut-être que cela n'a pas grand importance, mais je t'indique ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou Binary64. Mais le code qui suit les séquences d'échappement est justement le code du caractère dans le jeu spécifié. Or pour certains caractères (heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par contre, la séquence d'octets correspondants aux caractères peut être interprétée différemment selon l'encodage figurant dans l'en-tête MIME. Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe OE6. Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y trouver ton bonheur. http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Gloops
Jean-Marc a écrit, le 08/10/2005 19:52 :
http://myjmnhome.dyndns.org/download.htm
Ah oui, c'est vrai que c'est plus rapide.
En fait, je me rappelle maintenant, c'est de ton projet que je suis parti (je l'ai conseillé un temps aux gens qui posaient la question, et un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi ajouté une ListView (ce qui fait double emploi il est vrai ; ListView est plus lisible et l'autre étant en place j'ai laissé). Plus récemment est apparu un autre formulaire avec un WebBrowser pour voir les messages au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de structure ne pardonnent pas.
Je crois que c'est surtout au niveau de l'extraction des différents champs de chaque message qu'il va falloir faire attention.
Bonnes investigations!
Merci.
Jean-Marc a écrit, le 08/10/2005 19:52 :
http://myjmnhome.dyndns.org/download.htm
Ah oui, c'est vrai que c'est plus rapide.
En fait, je me rappelle maintenant, c'est de ton projet que je suis
parti (je l'ai conseillé un temps aux gens qui posaient la question, et
un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant
par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi
ajouté une ListView (ce qui fait double emploi il est vrai ; ListView
est plus lisible et l'autre étant en place j'ai laissé). Plus récemment
est apparu un autre formulaire avec un WebBrowser pour voir les messages
au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de
structure ne pardonnent pas.
Je crois que c'est surtout au niveau de l'extraction des différents
champs de chaque message qu'il va falloir faire attention.
En fait, je me rappelle maintenant, c'est de ton projet que je suis parti (je l'ai conseillé un temps aux gens qui posaient la question, et un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi ajouté une ListView (ce qui fait double emploi il est vrai ; ListView est plus lisible et l'autre étant en place j'ai laissé). Plus récemment est apparu un autre formulaire avec un WebBrowser pour voir les messages au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de structure ne pardonnent pas.
Je crois que c'est surtout au niveau de l'extraction des différents champs de chaque message qu'il va falloir faire attention.
Bonnes investigations!
Merci.
Gloops
Salut,
Je viens d'essayer, le symbole € (euro) est bien converti (en tout cas si il est envoyé depuis Eudora, version française), si tu veux je regarderai à quel niveau. En attendant c'est vrai que j'ai beaucoup simplifié, et que ça ne fera pas trop de mal d'être un peu plus rigoureux. Au petit coup d'oeil que je viens d'y lancer, ce sera au prix d'une doc conséquente à potasser. Or je viens de me lancer dans l'étude de celle du réglage du son, qui est pas mal non plus.
Les fonctions que je connaissais jusque là pour régler le son gèrent un autre canal que ceux que peut gérer l'utilisateur, mais le volume général du son, niet, alors qu'avec la doc que j'ai trouvée avant-hier, si. Celui du micro, aussi. ça c'est fourni tout prêt, après j'aimerais sélectionner la source sonore par défaut, et là il faut plonger dedans.
En tout cas merci pour ces infos. ___________________________________ Fred a écrit, le 08/10/2005 20:18 :
Dans : news:43479262$0$27434$, Gloops disait :
Bonjour tout le monde,
Bonjour Gloops, Pour compléter tout ce qui a été dit, il me semble que tu fais fausse route. Ton exemple fonctionne probablement bien avec les caractères courants tels que le é, mais avec l'euro par exemple cela ne va pas donner le résultat escompté. Peut-être que cela n'a pas grand importance, mais je t'indique ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou Binary64. Mais le code qui suit les séquences d'échappement est justement le code du caractère dans le jeu spécifié. Or pour certains caractères (heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par contre, la séquence d'octets correspondants aux caractères peut être interprétée différemment selon l'encodage figurant dans l'en-tête MIME. Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe OE6. Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y trouver ton bonheur. http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
Salut,
Je viens d'essayer, le symbole € (euro) est bien converti (en tout cas
si il est envoyé depuis Eudora, version française), si tu veux je
regarderai à quel niveau. En attendant c'est vrai que j'ai beaucoup
simplifié, et que ça ne fera pas trop de mal d'être un peu plus
rigoureux. Au petit coup d'oeil que je viens d'y lancer, ce sera au prix
d'une doc conséquente à potasser. Or je viens de me lancer dans l'étude
de celle du réglage du son, qui est pas mal non plus.
Les fonctions que je connaissais jusque là pour régler le son gèrent un
autre canal que ceux que peut gérer l'utilisateur, mais le volume
général du son, niet, alors qu'avec la doc que j'ai trouvée avant-hier,
si. Celui du micro, aussi. ça c'est fourni tout prêt, après j'aimerais
sélectionner la source sonore par défaut, et là il faut plonger dedans.
En tout cas merci pour ces infos.
___________________________________
Fred a écrit, le 08/10/2005 20:18 :
Dans : news:43479262$0$27434$8fcfb975@news.wanadoo.fr,
Gloops disait :
Bonjour tout le monde,
Bonjour Gloops,
Pour compléter tout ce qui a été dit, il me semble que tu fais fausse
route.
Ton exemple fonctionne probablement bien avec les caractères courants
tels que le é, mais avec l'euro par exemple cela ne va pas donner le
résultat escompté.
Peut-être que cela n'a pas grand importance, mais je t'indique
ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou
Binary64.
Mais le code qui suit les séquences d'échappement est justement le code
du caractère dans le jeu spécifié. Or pour certains caractères
(heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou
Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont
autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par
contre, la séquence d'octets correspondants aux caractères peut être
interprétée différemment selon l'encodage figurant dans l'en-tête MIME.
Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis
des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe
OE6.
Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y
trouver ton bonheur.
http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
Je viens d'essayer, le symbole € (euro) est bien converti (en tout cas si il est envoyé depuis Eudora, version française), si tu veux je regarderai à quel niveau. En attendant c'est vrai que j'ai beaucoup simplifié, et que ça ne fera pas trop de mal d'être un peu plus rigoureux. Au petit coup d'oeil que je viens d'y lancer, ce sera au prix d'une doc conséquente à potasser. Or je viens de me lancer dans l'étude de celle du réglage du son, qui est pas mal non plus.
Les fonctions que je connaissais jusque là pour régler le son gèrent un autre canal que ceux que peut gérer l'utilisateur, mais le volume général du son, niet, alors qu'avec la doc que j'ai trouvée avant-hier, si. Celui du micro, aussi. ça c'est fourni tout prêt, après j'aimerais sélectionner la source sonore par défaut, et là il faut plonger dedans.
En tout cas merci pour ces infos. ___________________________________ Fred a écrit, le 08/10/2005 20:18 :
Dans : news:43479262$0$27434$, Gloops disait :
Bonjour tout le monde,
Bonjour Gloops, Pour compléter tout ce qui a été dit, il me semble que tu fais fausse route. Ton exemple fonctionne probablement bien avec les caractères courants tels que le é, mais avec l'euro par exemple cela ne va pas donner le résultat escompté. Peut-être que cela n'a pas grand importance, mais je t'indique ci-dessous quelques précisions.
Tout d'abord, ce que tu convertis, c'est le format Quoted-printable ou Binary64. Mais le code qui suit les séquences d'échappement est justement le code du caractère dans le jeu spécifié. Or pour certains caractères (heureusement pas trop fréquents), le code ISO-8859-1, ISO-8859-15 ou Windows-1252 n'est pas identique !
Autre point : dans certains en-têtes, les caractères 8 bits sont autorisés, et alors n'apparaissent pas ces séquences d'échappement. Par contre, la séquence d'octets correspondants aux caractères peut être interprétée différemment selon l'encodage figurant dans l'en-tête MIME. Regarde par exemple ici : http://www.miakinen.net/vrac/c07b/charsets
Bref, écrire un programme qui gère tous ces points nécessite à mon avis des tables de correspondance de codes.
(Le framework .NET propose des classes spécialisées pour cela ;-) )
Plus sérieusement, j'ai regardé un lien proposé par Paskal sur le groupe OE6. Je n'ai pas testé l'utilisation de ces APIs, mais peut-être que tu vas y trouver ton bonheur. http://msdn.microsoft.com/library/en-us/OutlookExpress/oe/oe_entry.asp
Jean-Marc
"Gloops" a écrit dans le message de news:43481234$0$5401$
Jean-Marc a écrit, le 08/10/2005 19:52 : > http://myjmnhome.dyndns.org/download.htm
Ah oui, c'est vrai que c'est plus rapide.
En fait, je me rappelle maintenant, c'est de ton projet que je suis parti (je l'ai conseillé un temps aux gens qui posaient la question, et un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi ajouté une ListView (ce qui fait double emploi il est vrai ; ListView est plus lisible et l'autre étant en place j'ai laissé). Plus récemment est apparu un autre formulaire avec un WebBrowser pour voir les messages au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de structure ne pardonnent pas.
Re,
si je puis me permettre qq petits conseils, qui te rendront la vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc Comme cela, tu ne risques pas d'oublier de déclarer une variable ni d'utiliser une variable pour une autre à cause d'une faute de frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la forme IF ... THEN ' traitement ENDIF Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des boucles. Exemple, dans ton code, tu calcules dans une boucle compliquée et longue (plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose qui ne change pas dans la boucle (strRepereGauche et strRepereDroit). C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta fonction ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant le IIF par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au lieu des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en exécuter moins grace à quelques ELSE, on regagne encore. Il Y avait aussi plein de choses qu'il était possible de préprocesser (un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou j'ai gagné le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu avais étaient déjà très largement suffisantes.
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
"Gloops" <gloops@niark.fr> a écrit dans le message de
news:43481234$0$5401$8fcfb975@news.wanadoo.fr...
Jean-Marc a écrit, le 08/10/2005 19:52 :
> http://myjmnhome.dyndns.org/download.htm
Ah oui, c'est vrai que c'est plus rapide.
En fait, je me rappelle maintenant, c'est de ton projet que je suis
parti (je l'ai conseillé un temps aux gens qui posaient la question, et
un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant
par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi
ajouté une ListView (ce qui fait double emploi il est vrai ; ListView
est plus lisible et l'autre étant en place j'ai laissé). Plus récemment
est apparu un autre formulaire avec un WebBrowser pour voir les messages
au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de
structure ne pardonnent pas.
Re,
si je puis me permettre qq petits conseils, qui te rendront la
vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc
Comme cela, tu ne risques pas d'oublier de déclarer une variable
ni d'utiliser une variable pour une autre à cause d'une faute de
frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la
forme
IF ... THEN
' traitement
ENDIF
Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et
tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette
à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des
boucles.
Exemple, dans ton code, tu calcules dans une boucle compliquée et longue
(plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose
qui ne change pas dans la boucle (strRepereGauche et strRepereDroit).
C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta
fonction
ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant
le IIF
par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au
lieu
des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en
exécuter moins
grace à quelques ELSE, on regagne encore.
Il Y avait aussi plein de choses qu'il était possible de préprocesser
(un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou
j'ai gagné
le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu
avais étaient déjà très largement suffisantes.
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
"Gloops" a écrit dans le message de news:43481234$0$5401$
Jean-Marc a écrit, le 08/10/2005 19:52 : > http://myjmnhome.dyndns.org/download.htm
Ah oui, c'est vrai que c'est plus rapide.
En fait, je me rappelle maintenant, c'est de ton projet que je suis parti (je l'ai conseillé un temps aux gens qui posaient la question, et un jour je me suis rendu compte qu'il n'était plus en ligne).
Après, j'ai ajouté la lecture automatique des messages, en commençant par le plus récent, et ils s'ajoutent dans une liste. Depuis j'ai aussi ajouté une ListView (ce qui fait double emploi il est vrai ; ListView est plus lisible et l'autre étant en place j'ai laissé). Plus récemment est apparu un autre formulaire avec un WebBrowser pour voir les messages au format HTML.
Quand on ajoute plein de trucs, comme ça, c'est vrai que les erreurs de structure ne pardonnent pas.
Re,
si je puis me permettre qq petits conseils, qui te rendront la vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc Comme cela, tu ne risques pas d'oublier de déclarer une variable ni d'utiliser une variable pour une autre à cause d'une faute de frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la forme IF ... THEN ' traitement ENDIF Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des boucles. Exemple, dans ton code, tu calcules dans une boucle compliquée et longue (plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose qui ne change pas dans la boucle (strRepereGauche et strRepereDroit). C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta fonction ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant le IIF par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au lieu des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en exécuter moins grace à quelques ELSE, on regagne encore. Il Y avait aussi plein de choses qu'il était possible de préprocesser (un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou j'ai gagné le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu avais étaient déjà très largement suffisantes.
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
Gloops
Pour sûr, si j'améliore dans les mêmes proportions l'extraction des champs, le résultat sera appréciable.
Ah, effectivement, pour la déclaration des variables, la petite case n'était pas cochée ... Alors parfois, j'oublie.
Je croyais gagner en concision, diminuer le nombre de lignes, mais c'est vrai que dans le code de quelqu'un d'autre on ne risque pas de se rappeler, alors il y a intérêt à être clair.
Merci beaucoup pour tous ces conseils
Jean-Marc a écrit, le 08/10/2005 21:32 :
Re,
si je puis me permettre qq petits conseils, qui te rendront la vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc Comme cela, tu ne risques pas d'oublier de déclarer une variable ni d'utiliser une variable pour une autre à cause d'une faute de frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la forme IF ... THEN ' traitement ENDIF Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des boucles. Exemple, dans ton code, tu calcules dans une boucle compliquée et longue (plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose qui ne change pas dans la boucle (strRepereGauche et strRepereDroit). C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta fonction ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant le IIF par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au lieu des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en exécuter moins grace à quelques ELSE, on regagne encore. Il Y avait aussi plein de choses qu'il était possible de préprocesser (un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou j'ai gagné le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu avais étaient déjà très largement suffisantes.
Pour sûr, si j'améliore dans les mêmes proportions l'extraction des
champs, le résultat sera appréciable.
Ah, effectivement, pour la déclaration des variables, la petite case
n'était pas cochée ... Alors parfois, j'oublie.
Je croyais gagner en concision, diminuer le nombre de lignes, mais c'est
vrai que dans le code de quelqu'un d'autre on ne risque pas de se
rappeler, alors il y a intérêt à être clair.
Merci beaucoup pour tous ces conseils
Jean-Marc a écrit, le 08/10/2005 21:32 :
Re,
si je puis me permettre qq petits conseils, qui te rendront la
vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc
Comme cela, tu ne risques pas d'oublier de déclarer une variable
ni d'utiliser une variable pour une autre à cause d'une faute de
frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la
forme
IF ... THEN
' traitement
ENDIF
Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et
tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette
à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des
boucles.
Exemple, dans ton code, tu calcules dans une boucle compliquée et longue
(plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose
qui ne change pas dans la boucle (strRepereGauche et strRepereDroit).
C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta
fonction
ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant
le IIF
par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au
lieu
des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en
exécuter moins
grace à quelques ELSE, on regagne encore.
Il Y avait aussi plein de choses qu'il était possible de préprocesser
(un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou
j'ai gagné
le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu
avais étaient déjà très largement suffisantes.
Pour sûr, si j'améliore dans les mêmes proportions l'extraction des champs, le résultat sera appréciable.
Ah, effectivement, pour la déclaration des variables, la petite case n'était pas cochée ... Alors parfois, j'oublie.
Je croyais gagner en concision, diminuer le nombre de lignes, mais c'est vrai que dans le code de quelqu'un d'autre on ne risque pas de se rappeler, alors il y a intérêt à être clair.
Merci beaucoup pour tous ces conseils
Jean-Marc a écrit, le 08/10/2005 21:32 :
Re,
si je puis me permettre qq petits conseils, qui te rendront la vie facile:
- Utilise toujours Option Explicit, dans chaque forme, module, etc Comme cela, tu ne risques pas d'oublier de déclarer une variable ni d'utiliser une variable pour une autre à cause d'une faute de frappe.
- Même quand il n'y a qu'une instruction après un Then, utilise la forme IF ... THEN ' traitement ENDIF Tu éviteras des erreurs de logiques difiiciles à voir sans cela, et tu rendras la tâche plus facile au(x) relecteur(s) et à toi aussi...
- Evite IIF( ..., .., ..) : C'est lent et l'utilisation est sujette à des erreurs difficiles à traquer.
Pour les performances:
Une règle d'or: toujours faire le maximum de travail EN DEHORS des boucles. Exemple, dans ton code, tu calcules dans une boucle compliquée et longue (plusieurs dizaines de passages possibles) 2 fois un Len() de quelque chose qui ne change pas dans la boucle (strRepereGauche et strRepereDroit). C'est très mauvais en terme de performances.
Juste pour le fun, je me suis amusé à remettre un peu d'order dans ta fonction ConvISO8859(). En mettant les Len() en dehors de la boucle, et en remplaçant le IIF par un If else endif, je gaganais déjà presque 30%. En utilisant des LONG au lieu des INTEGER, je regagnais 15%. En réécrivant les IF du début pour en exécuter moins grace à quelques ELSE, on regagne encore. Il Y avait aussi plein de choses qu'il était possible de préprocesser (un seul prétraitement) au lieu de le faire dans les boucles. C'est la ou j'ai gagné le plus (environ 200%).
Tout ça mis bout à bout, j'allais finalement 2,5 fois plus vite.
C'est juste pour le sport, on est d'accord, ici les performances que tu avais étaient déjà très largement suffisantes.