IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Optimiser le temps de traitement


Sujet :

Delphi

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 044
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    cela dépend beaucoup de certaines options du composant FDQuery
    En particulier FetchOptions.RecordcountMode, FetchOptions.Mode et autres FetchOptions
    comme l'a souligné Buzz c'est plutôt RecordCount qu'il faut utiliser et ce RecordCount va dépendre de ces options (en général pour des requêtes revoyant beaucoup de données on passe par de petits paquets et donc tout n'est pas rapatrié en même temps, juste quand il faut donc RecordCount peut être faux) il vaut mieux utiliser une requête SELECT COUNT(1) C FROM Tb_Barres where signal <> 0' dans ce genre de cas plutôt que de faire un FetchAll qui va ralentir le programme

    pour obtenir les 50 premiers résultats et seulement ceux-là c'est une tout autre technique, l'utilisation de la clause après la clause where LIMIT 50
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Membre régulier
    Homme Profil pro
    pas grand chose
    Inscrit en
    Septembre 2018
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : pas grand chose
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2018
    Messages : 131
    Points : 73
    Points
    73
    Par défaut
    En effet la propriété FetchOptions.RecordcountMode était à 50.

    Mais je crois en fat que mon pb est celui du débutant qui croit avoir compris...

    Je testais le nombre de résultat pour boucler dessus mais je me suis aperçu, c est peut être pas très académique, que au lieu de procéder ainsi il me suffisait de tester en faisant un if EOF et seulement si ce n était pas le cas, alors je bouclais sur les résultats...

    Merci à tous pour votre aide et votre patience

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    1.8 M de donnée c'est pas grand chose. J'éviterais les bases de donnée. C'est pas particulièrement rapide

    Trier les données ne sert à rien car tu fais probablement des calculs glissants...

    Créer un tableau d'entier (jusqu'à l'octet si tu veux en plus sauver de l'espace) de préférence qui optimise la vitesse (suggestion de Paul Toth)

    Un octet donne une résolution de 1/2^8 soit 1/258 ou encore 0.004 soit 0.4% ce qui devrait être amplement pour des calculs statistiques
    Si l'espace n'est pas un problème un entier non signé c'est 1/2^32 ...

    Comme SergioMaster le suggère (?) tu peux convertir les données enregistrés sur disque pour qu'elle soit plus compacte: plus rapide à lire.

    De plus tu peux enregistrer le tableau sur disque une fois rempli, ce qui sera encore plus rapide pour le chargement des données.

    Le reste c'est de revoir les algos encore et encore afin de trouver de meilleur pratique.

    Suggestion: fais des calculs glissants: Lors d'une recherche sur une fenêtre de 10 jours: au lieu de calculer les dix jours précédent pour chaque points, tu enlèves le dernier jour du calcul précédent et ajoute le premier jour pour le jour suivant. ce qui fait une économie de 10 opérations.
    Ou fait autrement tu peux calculer la fenêtre de 3 jours suivi de 4, puis 5, etc. ce qui devient alors une addition simple : ultrarapide.

    Tu mets dans le tableau des calculs préliminaires mais répétitifs. Si pour chaque jours t'as besoin de l'écart Min-Max, tu rempli un tableau de valeurs min-max ce qui évite, lors de tes balayages, de répéter ces calculs inutiles.

    Grosso modo ta ligne de code doit ce résumer à la plus simple expression du genre

    t:=a-b+c; //
    si t>max alors...
    si t<min alors...

Discussions similaires

  1. optimiser le temp du traitement d'une boucle
    Par riad_09 dans le forum Développement
    Réponses: 1
    Dernier message: 05/11/2009, 08h38
  2. Réponses: 2
    Dernier message: 11/04/2009, 12h57
  3. optimisation du temps de traitement cat
    Par josepeemiasa dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 10/03/2008, 18h35
  4. Optimisation du temps de traitement
    Par djuddju dans le forum Oracle
    Réponses: 4
    Dernier message: 20/04/2006, 21h16
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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