|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
salut,
j'aurais voulut savoir comment optimiser le temps de réponse de mes pages asp? Ma base (access) semble etre optimiser j'ai des index, etc.. merci. |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : mai 2004 Messages : 225 ![]() |
|
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
Merci, j'ai suivi les indications de ce tutoriel mais cela n'à accéléré mon script que de quelque secondes (35 au lieu de 40, je voudrais au moins arriver à 15 sinon mon projet ne sera pas validé)
Bizzarement lorsque je rajoute le <% OPTION EXPLICIT %> mon script est plus long, alors que d'apres le tuto cela devrait l'accélérer. j'attend toujours d'autre solution merci. |
|
|
00
|
|
|
#4 | |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Bonjour
35 secondes me semblent énormes !! j'ai personnellement la même architecture (asp + access), les temps d'interrogation des tables les plus "lourdes" (de l'ordre de 600.000 enregistrements) ne prennent que quelques secondes (5 au grand maxi) Citation:
|
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
oui je suis bien sur!
j'ai mis des index dans tout les champs où je faisait des recherches, comparaisons, etc.. Je ne vois pas où je peux en mettre d'autre si ce n'est en en mettant dans tout les champs, mais je pense pas que cela serve à grand chose. Le temps d'éxécution qui est si enorme vient d'une requete laquelle je parcours à l'aide d'une boucle elle meme contenue dans une autre boucle. le nombre de passage dans la premiere boucle dépend du nombre de choix de l'utilisateur dans la premiere page . pour chaques choix de l'utilisateur je dois afficher des valeurs pour 52 semaines= 2ème boucle. autrement dis si 10 choix sont selectioné alors je vais boucler 10 fois et dans chaque bouclage je reboucle 52 fois. je sais que je suis pas tres clair mais je pense et je suis sur que le temps aussi grand que met mon script a etre executé viens de là et non pas de ma table qui je le répète est bien optimisée. Merci encore. |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Bonjour
Si on peut voir la requete et/ou l'algo que tu utilises, il doit y avoir moyen d'optimiser, car effectivement, des boucles dans des boucles, "ça bouffe" Si tu execute 52 * 10 requetes (si j'ai bien compris), effectivement, Access, même avec la meilleure volonté du monde, doit montrer ses limites. Le principe serait d'écrire une requete et une seule contenant tout ce dont tu as besoin, puis de gérer les ruptures par prog (si c'est possible, il faut connaitre ta BdD pour voir ça) |
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
Je te remercie de ta reponse, en effet j'ai trouvé un moyen de sortir ma requete de la boucle et , en effet cela m'a permis de diviser le temps d'éxécution par 3.
Cepandant, j'ai une autre requete que je pourrais sortir de la boucle, mais en utlisant la méthode find, car j'ai un critere qui evolue dans ma boucle. Le souci c'est que ASP ne semble pas reconnaitre la methode find et j'obtiens une erreur du type: ADODB.Recordset (0x800A0CC1) Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé ex: Code :
le problème vient du find, et j'ai testé car je suis sur que j'ai dans ma base une valeur pour la semaine 2 mais toujours la meme erreur. |
||
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Citation:
PS : eviter autant que possible les accents dans les noms de champs, ainsi que les espaces |
|
|
|
00
|
|
|
#9 | ||
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
Citation:
Je sais mais je n'avais pas le choix pour nommer mes champs. Citation:
Pourtant il y a bien un champs nommée semaine dans ma table, je pense que cela vient de la methode find, car si je rajoute le critere dans ma requete ca fonctionne Code :
"select * from valeur where année=2006 and semaine=" & semaine
Or c'est ce que je cherche à éviter. Peut etre que j'utilise mal cette methode mais dans tous les tutoriels que j'ai trouvé c'est comme ça que c'était expliqué. J'ai essayé la métrhode filter mais j'ai le meme msge d'erreurs. |
||
|
|
00
|
|
|
#10 | ||
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
le mieux que je ferai, c'est :
Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
le souci est là, il peut y avoir des semaines abscentes dans la table, alors voilà ce que j'ai fait:
Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
cela fonctionne, mais en réalité le problème est un peu plus complexe, mais je ne voulais pas précipité les choses
en fait cette boucle est contenue dans une autre boucle: Code :
mon souci est que le critere annee evolue egalement dans la boucle mais pas de maniere ordonnée, donc je suis obligée de laisser la requete à l'interieur de la boucle, d'où l'utilité de la methode find |
||
|
|
00
|
|
|
#13 | ||
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
C'est pas très judicieux :
Ca n'apporte rien par rapport à la solution que je te donnais, au contraire : imagines que la semaine 1 soit absente de ta table : tu n'aura aucun affichage. de deux choses l'une (l'autre c'est le soleil ! ) : Soit tu veux afficher une ligne par semaine présente dans ta table : cf ma soluce précédente Soit tu veux afficher 52 semaines, et les éventuelles valeurs trouvées dans la table. Dans ce cas, fais : Code :
Les temps de réponse sont ils plus "acceptables" ? |
||
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 810 ![]() |
Re,
Je ne fais que passer, mais j'ai eu à gérer ce genre de calendrier et pour m'en sortir, j'ai été obligé de créer une table des semaines (ANNEE NUMSEMAINE). J'utilises ensuite cette table pour faire des jointures au cas où dans mes données il y a une semaine qui n'existe pas.
__________________
Par principe, je ne réponds pas aux messages URGENT. Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu) |
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
tout d'abord je n'ai pas compris l'interet de ta deuxieme boucle for.
ensuite mais entetes sont deja créé hors de la boucle for i= 1 to 52 <td><%=i%></td> next avec ma methode si une semaine est manquante j'aurais une case vide, et c'est ce que je veux: entetes: 1 2 3 4 5 6 7 ... 52 valeur: v1 v2 v3 v4 v6 v7 ... v52 c'est ce qu'il m'affiche et c'est ce que je veux. les temps d'acces sont nettement plus raisonable, mais je pense pouvoir encore les amelioré en resolvant le pb que j'ai soumis juste avant ton poste. merci |
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
j'avais pas vu ce post (le #12)
|
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
ok pas de souci, par contre, maintenant que tu la vu lol, t'aurais pas une solution, je suis persuadée qu'avec find ça serait cool, mais bon.
|
|
|
00
|
|
|
#18 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
N'ayant pas tous les éléments, difficile de répondre. seulement, pour find, il faut savoir qu'il n'autorise des recherches que sur un seul champs :
recordset.find("champs=" & valeur) ca veut dire qu'il est impossible de faire quelquechose du style : recordset.fin("champs1=" & valeur & " and champs2=" & valeur2) ensuite, si tu dois faire plusieurs recherches, il faut "revenir au début" de ton recordset a chaque fois : if not recordset.bof then recordset.movefirst recordset.find(...) if recordset.eof then ' pas trouvé else ' trouvé !! end if il faut aussi avoir pris la précaution de déclarer ton curseur en dynamique : recordset.cursorType= 2 |
|
|
00
|
|
|
#19 | ||||||
|
Membre du Club
![]() Inscription : février 2007 Messages : 172 ![]() |
J'ai remplacé:
Code :
Code :
et j'obtiens l'erreur suivante a la ligne erreur: Code :
Ps: mon recordset.cursortype vaut 2 |
||||||
|
|
00
|
|
|
#20 |
![]() ![]() Inscription : avril 2007 Messages : 1 364 ![]() |
Je serai toi, je ferais un test sur une autre base de données de test (avec access, c'est rapide), en supprimant cet accent qui me chagrine beaucoup
Encore une fois, cette erreur est donnée par un champs inexistant Ou peut-etre, essaie ceci : recordset3.find("[année]=" & annee) (sans conviction : pas testé) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com