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 PHP Discussion :

[Tableaux] Exploitation de la mémoire avec PHP


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut [Tableaux] Exploitation de la mémoire avec PHP
    Bonjour à tous,

    J'ai une question à poser à propos de l'occupation en mémoire des calculs en PHP(je pense que c'est un peu identique pour les autres langages).

    J'explique en gros le script. Il permet d'insérer des données issues de fichiers textes dans une base de données selon certaines conditions.

    soit :

    1/ Pour chaque fichier
    On lit le fichier lignes par lignes
    On teste les conditions
    On insère les valeurs dans un tableau
    Fin pour

    2/ On traduit le tableau pour mettre les valeurs dans un fichier texte

    3/ On fait un Load data infile du fichier dans la base de donnée

    Ma question est la suivante, php utilise quelle mémoire pour effectuer les opérations ? RAM ? Fichier d'échange ? Mémoire virtuelle ?

    J'aurais tendance à dire que les operations se font exclusivement en RAM.

    Est ce que ca vous etonne que 100Mo de données en fichier texte utilise la totalité de 512Mo RAM ?

    Merci par avance


    ps : connaissez vous des sites qui explique comment est exploité la mémoire ?

  2. #2
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Ce n'est pas PHP qui s'occupe de la gestion de la memoire physique.
    C'est le systeme d'exploitation.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  3. #3
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    Je suis d'accord mais PHP gère ses performances aussi.

    je cherche un lien comme celui-ci mais pour le php

    http://4d.developpez.com/notes-techn...gestion-cache/

  4. #4
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    un petit up,

    personne n'a de connaissance ?

  5. #5
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Bonjour,

    Les tableaux en PHP consomment beaucoup plus de mémoire que le "contenu brut", à cause d'un système de hashage.

    Ce hashage permet d'avoir des tableaux très rapides d'accès, avec la contrepartie qu'il consomme beaucoup de mémoire.

    D'un autre coté, charger 100Mo d'une traite, ça ne me semble pas vraiment "optimisé" : pour lire un DVD de 4.7Go tu le chargerais entièrement en mémoire ?
    D'autant plus qu'ici le fait de le charger en mémoire ne t'apporte rien du tout.
    Google is watching you !

  6. #6
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Kioob
    Bonjour,

    Les tableaux en PHP consomment beaucoup plus de mémoire que le "contenu brut", à cause d'un système de hashage.

    Ce hashage permet d'avoir des tableaux très rapides d'accès, avec la contrepartie qu'il consomme beaucoup de mémoire.

    D'un autre coté, charger 100Mo d'une traite, ça ne me semble pas vraiment "optimisé" : pour lire un DVD de 4.7Go tu le chargerais entièrement en mémoire ?
    D'autant plus qu'ici le fait de le charger en mémoire ne t'apporte rien du tout.
    Merci pour l'info sur les tableaux

    je ne charge pas 100Mo d'une traite. Cela dépend du nombre de fichier à importer.

    Pour chaque fichier, j'ai :
    - j'ouvre le fichier
    - je le lis ligne par ligne et je récupère les valeurs selon des tests dans un tableau
    -je ferme le fichier

    Les valeurs contenues dans le tableau peuvent varié en fonction des valueurs contenues dans les autres fichiers.

    La taille du tableau final arrive à une taille de 8/10Mo(je dis bien du tableau).

    Le "probleme" que je rencontre est que pour les 1er fichiers, le traitement s'effectue tres rapidement puis apres quelques minutes de traitement les performances chutent en fonction de la quantité de RAM sur le serveur.

    Sinon à propos du fait que je ne gagne rien, sur un traitement dans une base de données, le script mets 20min. Avec les tableaux moins de 3 min. Je crois qu'on y gagne quelque chose.

    Après, s'il y a une autre méthode moins gourmande et aussi efficace je suis preneur.

  7. #7
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Effectivement, à partir du premier message je comprenais que tu lisais chaque fichier ligne par ligne pour les charger dans un tableau puis que réécrivait derrière...

    Bref, un hideux "file()" avec un "foreach()" sur la tableau


    Sinon... non, je ne vois pas de raison à ces problèmes de mémoire. A moins qu'il s'agisse d'un "vieux" PHP sous Windows par exemple...
    Google is watching you !

  8. #8
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    sous Windows effectivement

    Et je n'ai pas le choix pour le file() et le foreach

    je te cache pas que je lutte à faire les tests de performances( il n'y a pas le get_memory_usage() sous windows ).

    sinon je voulais juste savoir où les données sont stockés en mémoire.

    je ne pense pas que ca touche à la memoire virtuelle, je tend toujours à croire que ca se passe en RAM.

    Sinon, peux tu me donner le lien ou tu as vu que les tableaux utilisent un système de hashage, j'aimerai en savoir un peu plus à ce sujet.

    Merci Kioob

  9. #9
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Arf... donc, pour la fonction file() essaye plutot un classique, ça aura déjà l'avantage de ne pas charger tout le fichier en mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if( $fp = fopen( 'xxxx', 'rb' ) )
    {
        while(!feof( $fp ) )
        {
            $line = fgets( $fp, 4096 );
     
            // Ici le traitement que tu métais dans le foreach
        }
     
        fclose( $fp );
    }

    Sinon pour le stockage, bah comme dit plus haut, c'est le système d'exploitation qui gère ça, pas le programme : en gros PHP met ça en "mémoire". Et de son niveau, c'est tout ce qu'il voit.
    Après l'OS va déterminer suivant la quantité de mémoire physique libre s'il utilise de la mémoire "physique" ou "virtuelle" (= fichier d'échange, swap).
    Mais aucun programme n'a de contrôle là dessus, fort heureusement.



    Pour le lien sur l'utilisation des tables de hashage par PHP... euh... je ne me souviens pas du tout... mais Google sera sûrement plus au courant .
    Sinon, pour la théorie : http://fr.wikipedia.org/wiki/Table_de_hashage


    Mais je persiste sur le fait qu'il s'agit vraissemblablement d'un problème de conception de ta part, pas de gestion de la mémoire de PHP ou de l'OS (bien que le fait que ce soit Windows n'aide pas).
    Google is watching you !

  10. #10
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    Merci pour ces infos,

    Un problème au niveau de la conception, peut etre. Pourtant, j'ai essayé différentes méthodes( stocker les données dans des tables, faire un merge sur les tables, etc ).

    Le problème est apparu sur un serveur ayant peu de RAM sinon sur les autres ca passe nicquel.

    Merci encore, à bientôt

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

Discussions similaires

  1. [Tableaux] Exploiter un DataSet de .net avec PHP
    Par Kioo dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2008, 17h15
  2. Réponses: 4
    Dernier message: 05/12/2006, 20h13
  3. Réponses: 3
    Dernier message: 02/08/2006, 18h10
  4. [Tableaux] Tableau dynamique avec php
    Par Ricus28 dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2006, 22h46
  5. [Tableaux] Imprimer avec php
    Par amarcil dans le forum Langage
    Réponses: 4
    Dernier message: 11/04/2006, 17h18

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