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

Bases de données Delphi Discussion :

Application très lente au démarrage


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Application très lente au démarrage
    Bonjour,
    j'ai déveleppé une application de gestion (developpée avec DELPHI7) en utilisant firebird pour communiquer avec la base de données.
    Les premiers temps , il n'y avait aucun soucis, mais , apprès une année d'utilisation , l'application commence à prendre BEAUCOUP DE TEMPS pour se lancer (environ une demi-heure) pendant l'utilisation de l'application , tous marche normal

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Il faudrait savoir ce que fait l'application au démarrage et avec quels composants elle fonctionne...
    Si par exemple, elle ouvre des tables (composant TTable ou un leur équivalent), elle va donc adresser plusieurs requêtes au moteur de bases de données, requêtes qui vont nécessiter du temps avant d'être toute traitée... Ces temps vont donc s'accroitre au fur et à mesure que le volume de données va augmenter.

    A mon avis, il s'agit surtout d'un problème initial de conception de l'application et surtout de la manière dont elle va accéder aux données :
    1. en totalité, dès le démarrage
    2. à la demande et sur des ensembles pertinents (avec des conditions de filtre, etc)
    Philippe.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut explications
    L'application en elle meme communique avec une base de données via interbase et firebird ! est-ce que le fait que la base de données devient grande cause ce genres de soucis ! ? et comment fait firebird avec interbase pour charger la base de donnée au départ ? est-ce une siple conexion et requettes ou tout un chagement de la base ?

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par anissbenben Voir le message
    L'application en elle meme communique avec une base de données via interbase et firebird !
    Vous mélangez plusieurs concepts. Interbase et Firebird sont des moteurs de base de données. Firebird est né d'un fork d'Interbase 6.
    Votre application consulte et alimente votre base de données via un de ces 2 moteurs...
    Ma question est : Comment s'adresse-t-elle à 1 de ces moteurs ? Avec quels composants (TTable, TIbTable, TQuery, TIbQuery, etc) ?
    Citation Envoyé par anissbenben Voir le message
    est-ce que le fait que la base de données devient grande cause ce genres de soucis ! ?
    Firebird ou Interbase peuvent gérer des bases de données de plusieurs Giga octets sans souci. L'accès à une base de données dépend de la manière dont vous accédez à ces données :
    1. en ouvrant toutes les tables au démarrage (très très mauvaise solution) en utilisant des composants TTable ou apparentés,
    2. ponctuellement en fonction des demandes et en se limitant aux données pertinentes (bonne solution) en utilisant des composants TQuery ou apparentés.


    Citation Envoyé par anissbenben Voir le message
    et comment fait firebird avec interbase pour charger la base de donnée au départ ?
    Les moteurs de base de données ont leur propre mécanisme pour gérer les données et fournir celles qui sont demandées (je n'ai pas dit toutes les données) le plus rapidement possible; normal, c'est leur travail. Par contre, une application se doit de ne demander que l'ensemble de données minimal dont elle a besoin à un instant "t".
    Citation Envoyé par anissbenben Voir le message
    est-ce une siple conexion et requettes ou tout un chagement de la base ?
    Tout dépend de comment a été écrite votre application...
    Il y a globalement 2 moyens d'actions pour faire disparaitre ces lenteurs:
    a) côté base de données :
    poser des index pertinents sur les tables de la base de données,
    b) côté application :
    éviter d'utiliser les composants TTable ou apparentés et pire de les ouvrir tous dès le démarrage de l'application,
    utiliser les composants TQuery ou apparentés en écrivant des requêtes SQL où sera banni autant que possible les select * from au profit de select colonne1[, colloneI] from
    Philippe.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut merci
    merci pour votre réponse qui m'a fait comprendre beaucoup de choses, effectivement, j'ai des tas de query et de dataset et pleins d'autre aussi qui sont ouvert au démarrage mais je n'utilise aucun ttable ! voilà tout, je vais donc essayé d'"optimiser" si puis-je dire !
    merci encore une fois ! je rends la réponse dès que ça sera fait

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    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 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Avez vous aussi pensé à la 'santé' de votre base de données :
    Transactions non fermées etc ....

    un Backup de votre base Firebird permettra déjà de vider la 'poubelle'
    un Restore recalculera les indexs et recompactera la base
    un Gfix avant ces opérations , permettrait de situer les problèmes !
    Attention , au vu des temps de récation de votre programme , il serait bon de faire un restore 'test' dans une nouvelle BDD plutôt que d'écraser l'ancienne tout de suite .

    Vous indiquez des Query , mais Ph.B. pensait certainement aussi au type de composants BDE,IBxxxxx,ADOxxxx,DBExpress etc ... qui ne gèrent pas du tout les transactions de la même manière (d'où la question).

    a noter : j'ai une grosse application D3+BDE+Firebird+20postes qui a maintenant + de 10ans , jamais je n'ai eu de lenteur de démarrage (max 1mn) sauf problème réseau bien sur
    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

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Citation Envoyé par anissbenben Voir le message
    BEAUCOUP DE TEMPS pour se lancer (environ une demi-heure) pendant l'utilisation de l'application
    C'est totalement inconcevable comme temps, je me serais inquiété dès la minute passée !

    Tu devrais regarder les principes de Lazy Loading et de Lazy Initialisation !
    C'est l'art et la manière de retarder au plus tard que possible l'allocation d'une ressource, cela utilise souvent Singleton et Factory\Multiton

    Cela vaut aussi pour la DB !

    J'ajouterais le Prepared ou Prepate(), cela dépend des moteurs, utile pour une requête fréquemment lancé mais seule les valeurs dans les critères de recherche change (voir ParamByName...) comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM client WHERE nom = :param
    En préparant à l'avance avec un prepare explicite, cette requête sera 10 fois plus rapide qu'un prepare implicite
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    +, surement qu'on tu ouvre une requette, il y a plein qui sont liée maitre/esclave soit par liaison directe des composant soit dans afterscroll, aussi je te déconseil aussi d'utilisé lookup, mieux intégrer tout dans une seul requette avec jointure, et aussi il y les champs calculer si il contient des résultat de requette, même si une requette avec firebird il envoit une seul ligne au début, mais comme tu dis qu'il plantte pandant 1/2 heur, sa veux dire que tu récupére quelque part toute une tableou plus avec des dizéne de chmps calculer en arriére,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Essaies donc de mettre des points d'arrêt pour savoir à quel niveau le programme plante. Comme dit plus haut, plusieurs raison peuvent affecter les délai de ton appli. Une fois que t'as détecté la procédure ou l'instruction qui retarde l’exécution, tu la corrigera. Ne dit-on pas qu'un problème connu est à moitié résolu !

    Bon courage.

Discussions similaires

  1. application trés lente en php
    Par abdego dans le forum Langage
    Réponses: 10
    Dernier message: 16/05/2014, 11h35
  2. Application très lente sous solaris
    Par pchoucine dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 01/10/2009, 15h50
  3. Moniteur très lent au démarrage
    Par acacia dans le forum Composants
    Réponses: 0
    Dernier message: 29/08/2009, 09h43
  4. PC Portable très lent au démarrage.. DD ?
    Par jojodu31 dans le forum Composants
    Réponses: 7
    Dernier message: 24/04/2008, 19h47
  5. application très lente
    Par hamham dans le forum Général Java
    Réponses: 13
    Dernier message: 17/01/2007, 14h41

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