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

Langage Perl Discussion :

Pb de 'out of memory' lors de traitements de fichiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 51
    Par défaut Pb de 'out of memory' lors de traitements de fichiers
    Bonjour,
    J'ai mis en place un programme perl permettant d'effectuer un certains nombre d'opération sur un fichier .txt (taille 2500 Ko). Ce programme permet :
    - de rechercher les phrases identiques,
    - de faire remonter les 10 plus grandes ((en nombre de caractères) phrases
    - de faire remonter l'absence de certains caractères
    - de compter le nombre de tabulation
    Pour l'ensemble de ces traitements, il y a de nombreuses boucles.
    Lorsque je fait tourner ce programme sur un fichier d'environ 800 KO, le traitement est un peu long mais il est correctement terminé.
    Est ce que quelqu'un pourrait me donner une piste vers laquelle je pourrais me tourner pour rendre ce traitement réalisable sur n'importe quelle taille de fichier ?
    Merci d'avance
    PS : en PJ se trouve le programme en question.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Bonjour,

    Quelques conseils après avoir jeté un oeil à ton programme:

    Tu gardes beaucoup d'informations en mémoire qui ne sont pas indispensables. Par exemple, tu devrais écrire tes logs de suite et ne pas les mettre dans des tableaux.

    Tu utilises beaucoup de tableaux et ce n'est pas la structure la plus adaptée pour trouver des informations. des tables de hash vont être plus efficaces par exemple pour identifier les doublons.

    Ton algorithme pour trouver les 10 premières chaines est trop coûteux (stocker dans un tableau et trier à la fin). Tu ne cherches que les 10 premiers, tu n'as pas besoin de trier tout le fichier. Pour cela tu dois utiliser un tableau trié avec les 10 premiers qui sera vide au départ et à chaque ligne tu regardes si la nouvelle ligne rentre dans les 10 premiers.

    Je n'ai pas regardé en détail mais j'ai l'impression que la totalité de tes analyses peuvent se faire sans avoir le fichier global, en ligne par ligne, sauf bien entendu la détection de doublons. Pour cela, utilise une table de hash et si elle devient trop grosse, il est possible de la stocker dans un fichier au lieu de la mettre en mémoire (reviens vers le groupe si tu es dans ce cas)

    Un petit truc pour finir: le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $count = ($line=~ tr/*/*/);
    permet de compter le nombre de charactères dans une chaîne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $count = ($line=~ tr/\t/\t/);
    Permet de compter le nombre de tabs.

    Ton code est agréable à lire avec des commentaires. Merci! Par contre, commencer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use strict;use warnings;
    est indispensable pour un programme de cette taille!

    Bon courage et reviens vers le groupe si tu bloques quelque part.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2014, 16h38
  2. Réponses: 4
    Dernier message: 23/05/2007, 22h29
  3. out of memory lors d'un remplissage d'un dataset
    Par junoreactor dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/02/2007, 09h52
  4. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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