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 :

Programme "simple" devient très lent ?


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Programme "simple" devient très lent ?
    Bonjour,

    J'avoue ne pas trop comprendre. Je me permets donc de vous solliciter pour avoir votre avis, peut-être l'un de vous a déjà rencontré ce type de problème.

    En fait, je travaille sur un programme qui génère un fichier texte. Chaque ligne de ce fichier texte sont des chiffres.

    Jusque là, rien d'anormal.

    Le fichier texte ainsi généré contient environs 10 000 lignes.

    J'ai un P4 Hyper-Threading et un disque dur avec de l'espace libre. (ps: j'utilise Delphi 7)

    Mon problème est que la génération du fichier texte se fait très bien jusqu'à la ligne 373 où, là, systématiquement, l'exécution du programme se fait très très lentement. Il lui faut environ 1 secondes pour enregistrer une ligne.

    Ce qui m'étonne, c'est que j'ai testé ce même programme sur un ordinateur portable (Pentium 4) et un pc de bureau Céléron 1Ghz et là, sur ceux là, l'exécution est normale et rapide du début à la fin du traitement.

    J'ai tenté de désactivé l'hyperthreading de mon PC, d'exécuter le programme sur mon disque IDE et pas sur le principal (S-ATA) mais rien n'y fait.

    Savez-vous a quoi est dû cette lenteur ? Et comment la résoudre ?

    par avance, merci pour vos réponses...

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Il me semble bien que de créer une TStringList serait la bienvenue

    Style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       ...
       var 
          MonFichier : TStringList; 
    begin 
         MonFichier := TStringList.create; 
      try 
           MonFichier.LoadFromFile(..); 
       ... 
      finally 
          MonFichier.free; 
       end; 
    end;
    Ce n'est que la piste de cet exemple.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Le problème peut venir de la mémoire RAM --> tester la mémoire RAM avec memtest86 par exemple. Maintenant, au niveau du poids total du fichier généré, est il important ? Serait il pas mieux de travailler directement sur le disque que sur la mémoire par un FileStream ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour J-P,

    Merci pour ta réponse.

    Mais comment expliques-tu que ce même code fonctionne très bien sur un PC portable P4 et un céléron 1Ghz, donc des pc moins "performants" ?

    Je vais essayer ce que tu me dis pour voir si mon prog le gère mieux.

    Encore merci.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Portu,

    En fait, je n'utilise pas de FileStream.

    Je code ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AssignFile(F,'monFichier.txt');
    Append(F) ;
    writeln(F, 'monMot') ;
    closeFile(F) ;
    Par contre, il est vrai que je crois avoir un problème de mémoire, d'après les voyants de tests de ma carte mère. j'ai 512Mo de DDR et, au démarrage, il peut arriver que mon PC ne démarre pas et reste figé sur la page de "pub" du bios de la carte mère. Il faut alors que je fasse un reset pour qu'il redémarre correctement, ce qui n'est pas bien génant dans la mesure où, jusqu'à présent, je n'avais jamais été géné lors de l'utilisation. (Aucun plantage, etc...)

    Je vais explorer donc cette piste...

    Merci pour ta réponse

  6. #6
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut
    Salut.

    A mon avis deux voies sont à explorer en premier.

    Configuration du BIOS et compatibilité de la memoire.
    Ensuite, possibilité de la présence d'un virus.

    Une autre possibilité, le pilote de gestion de la mémoire par WINDOWS.
    Il existe des utilitaires disponibles sur le NET pour identifier chaque élément matériel de l'ordinateur par analyse du BIOS. Ils retourne le nom, la marque le N° de série des chipsets, les versions des pilotes etc...

    Bon courage.
    Rien n'est moins sur que l'incertain : Pierre DAC

  7. #7
    Invité
    Invité(e)
    Par défaut Solution trouvée ?
    Pour ceux que ça intéresse, je pense avoir trouvé la solution.

    >> pour la mémoire, j'ai fait toute une batterie de test, RAS. (memTest et d'autres). Je ne comprends donc pas pourquoi ma carte mère me signale, des fois, au démarrage une erreur de mémoire... à moins comme dis Philippe que ce soit une incompatibilité entre mon bios et ma mémoire. Enfin, ça dépasse le cadre de ce forum dédié à delphi donc, je vais y réfléchir de mon côté...

    >> pour le problème de lenteur, j'ai résolu le problème . En fait, comme il y avait plus de 10 000 lignes, ne sachant pas si delphi savait gérer en mémoire toutes ces données, pour chaque ligne, j'ouvrais le fichier, ajoutais la ligne, puis refermais le fichier. et ainsi de suite.
    Le problème semble être résolu en ouvrant le fichier une première fois. Puis en y ajoutant au fur et à mesure mes 10 000 lignes (voir plus). Puis, une fois toutes ces lignes ajoutées, je referme mon fichier.

    Par contre, je ne sais pas combien de lignes max, je peux ajouter sans avoir à fermer le fichier...

    En tous les cas, merci à vous tous pour vos réponses !!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Tu peux ajouter tant de lignes que tu veux sans avoir à refermer le fichier (dans la limite de 2Go pour la taille du fichier)...

    D'une manière simplifiée :
    - Après un WriteLn, Delphi envoie les données à Windows (Delphi ne garde pas en mémoire les données...).
    - Ces données passent par un tampon interne de Windows...
    - Lorsque le tampon interne de Windows est plein, les données sont écrites sur le disque...

    Et lors de l'appel à CloseFile, les dernières données contenues dans le tampon sont écrites sur le disque.
    Tu peux forcer le vidage du tampon par un appel à Flush(F) (par exemple après une série de WriteLn).

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci Rotule de ces précisions que je ne connaissais pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [rgb2hsv] MATLAB devient très lent
    Par mspeach dans le forum Images
    Réponses: 11
    Dernier message: 16/10/2008, 12h19
  2. Programme de traitement des salaires très lent
    Par salimdz dans le forum Bases de données
    Réponses: 22
    Dernier message: 06/03/2008, 21h33

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