Optimiser une boucle qui prend 2 jours de traitement ! lol
4 réponses
aitoz
Bonjour,
J'ai une boucle qui met 48 heures a se terminer.
je regarde a chaque code article la somme des quantités expédiées dans une
période.
le seul probleme est que ma table fait 200 méga et que ca prend un temps
fou.
Je me souviens une fois avoir optimiser ma boucle et j'avais gagné
énormément de temps.
Quelqu'un pourrait me dire si je peux l'optimiser
For y = 0 To CInt(Ds.Tables(0).Rows.Count.ToString) - 1
Requ = "SELECT ex_arti, SUM(ex_nbre) AS Expr1" _
& " FROM gpexpedi " _
& " WHERE (ex_dsai BETWEEN {" & Format(Date_Min, "MM/dd/yyyy") & "} AND {" &
Format(Date_Max, "MM/dd/yyyy") & "})" _
& " GROUP BY ex_arti" _
& " HAVING (ex_arti =" & Chr(39) & Ds.Tables(0).Rows(y).Item(0) & Chr(39) &
")"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
aitoz
Je vais essayer autrement ! Je vais essayer de faire d'abord une requete select de tous les articles. Sans tenir compte du code article en cours. Et ensuite je ferais une boucle sur mon dataset provisoir pour récupérer la quantité en stock.
Je sais c'est super mal optimisé. Mais c a cause de ma base, une vielle FoxPro 2.0 tout pourrie avec laquelle il est impossible de faire des liens correcte. Je suis contraint de faire la requete en deux étapes.
si vous avez une meilleur idée ?!
Merci beaucoup
Je vais essayer autrement !
Je vais essayer de faire d'abord une requete select de tous les articles.
Sans tenir compte du code article en cours.
Et ensuite je ferais une boucle sur mon dataset provisoir pour récupérer la
quantité en stock.
Je sais c'est super mal optimisé. Mais c a cause de ma base, une vielle
FoxPro 2.0 tout pourrie avec laquelle il est impossible de faire des liens
correcte.
Je suis contraint de faire la requete en deux étapes.
Je vais essayer autrement ! Je vais essayer de faire d'abord une requete select de tous les articles. Sans tenir compte du code article en cours. Et ensuite je ferais une boucle sur mon dataset provisoir pour récupérer la quantité en stock.
Je sais c'est super mal optimisé. Mais c a cause de ma base, une vielle FoxPro 2.0 tout pourrie avec laquelle il est impossible de faire des liens correcte. Je suis contraint de faire la requete en deux étapes.
si vous avez une meilleur idée ?!
Merci beaucoup
aitoz
Ouais chouette !
au lieu de 74heures de calcul, j'ai optimisé a 2 minutes 37s en moyenne. J'ai fais comme j'avais dis. J'ai d'abord stocké dans mon dataset et ensuite j'effectue une boucle.
C'est pas forcement le bon choix, je pourrais peut etre regardé du coté des relations, mais bon ! Pas assez de temps et trop compliqué ! Voila, sachez donc que les opérations sur le dataset vont 1000 fois plus vite que de faire des ouvertures fermetures sur la base. Logique non ? ;-)
Ouais chouette !
au lieu de 74heures de calcul, j'ai optimisé a 2 minutes 37s en moyenne.
J'ai fais comme j'avais dis. J'ai d'abord stocké dans mon dataset et ensuite
j'effectue une boucle.
C'est pas forcement le bon choix, je pourrais peut etre regardé du coté des
relations, mais bon !
Pas assez de temps et trop compliqué !
Voila, sachez donc que les opérations sur le dataset vont 1000 fois plus
vite que de faire des ouvertures fermetures sur la base.
Logique non ? ;-)
au lieu de 74heures de calcul, j'ai optimisé a 2 minutes 37s en moyenne. J'ai fais comme j'avais dis. J'ai d'abord stocké dans mon dataset et ensuite j'effectue une boucle.
C'est pas forcement le bon choix, je pourrais peut etre regardé du coté des relations, mais bon ! Pas assez de temps et trop compliqué ! Voila, sachez donc que les opérations sur le dataset vont 1000 fois plus vite que de faire des ouvertures fermetures sur la base. Logique non ? ;-)
Guillaume Davion
Sinon, une autre solution si tu sais que ta requete ne récupère qu'une seule valeur, c'est de faire un executeScalar sur la commande plutot que de faire un fill de dataset. Je ne sais pas si ce sera plus rapide que ta méthode (pas sur)
Sinon, une autre solution si tu sais que ta requete ne récupère
qu'une seule valeur, c'est de faire un executeScalar sur la commande
plutot que de faire un fill de dataset.
Je ne sais pas si ce sera plus rapide que ta méthode (pas sur)
Sinon, une autre solution si tu sais que ta requete ne récupère qu'une seule valeur, c'est de faire un executeScalar sur la commande plutot que de faire un fill de dataset. Je ne sais pas si ce sera plus rapide que ta méthode (pas sur)
Zoury
Salut ! :O)
Je ne sais pas si ce sera plus rapide que ta méthode (pas sur)
J'en mettrais ma main au feu.. :O)
-- Cordialement Yanick MVP pour Visual Basic
Salut ! :O)
Je ne sais pas si ce sera plus rapide que ta méthode (pas sur)