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

Android Discussion :

Gestion de gros fichiers


Sujet :

Android

  1. #1
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut Gestion de gros fichiers
    Bonjour à tous.

    Ayant acquis dernièrement une tablette samsung android, je me lance dans la programmation sous android.

    Mon projet consiste à afficher un arbre généalogique. Pour cela je dois lire des fichiers au format GEDCOM. Sur PC, je sais très bien le faire, j'ai déjà une application java qui me génère une vue graphique de mon arbre dans un fichier PDF.

    Sur android, je me suis basé sur les même sources pour lire le gedcom, mais la, dommage cela fonctionne mais uniquement pour les petits fichiers. Et oui la mémoire n'a pas la même taille. Du coup avec les gros fichier (le miens fait 3mb) j'obtiens un out of memory.

    Le gedcom est un ficher texte. Quel solution pouvez vous préconiser pour extraire les informations dans ce fichiers.

    Moi, j'ai bien penser à indexé toutes les entrées que je souhaite utilisé, (par exemple, numéro de ligne de chaque entrée) et, quand j'en ai besoin de charger, uniquement les infos qui m’intéresse, mais je ne sais pas faire en JAVA.

    Ma cible pour le moment est galaxy Samsung V5.0 wifi

    merci d'avance pour votre aide.
    Page sur Developpez : http://pbriand.developpez.com

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    3M ne me semple pas très gros pour un fichier (certaines images sont bien plus grosses que cela)...

    Il y a peut-être une memory-leak ? Ou l'utilisation de trop de views ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour nicroman.

    Merci pour ta réponse.

    Comme toi, je pensais que 3 méga serait pas trop gros. mais cela bloque quand même. je n'ai pas écrit le parser de gedcom, il est fournit par les mormons (cela peut paraitre bizard, mais ce sont des pro de la généalogie est outils qui tournent autour), donc il m'est difficile de dire si j'ai des fuites mémoire. le Out of memory intervient pendant le parsing du fichier gedcom, donc proviens de leur libraire.

    Pense tu que je vais devoir ré ecrire un parseur de gedcom ?

    A+
    Page sur Developpez : http://pbriand.developpez.com

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Si le parsing d'un fichier de 3Mo fait un un OutOfMemory, il y a des chances pour qu'il soit clairement à la rue....

    Je ne connais absolument pas le format en question, donc difficile d'évaluer, mais même 'inflated', je trouverai hallucinant qu'un fichier de 3Mo produise un OutOfMemory error.....

    Les sources de la librairie sont disponibles ?
    Quel est le format de sortir de la lib de lecture ? (pour moi c'est juste deux grosses tables de boites et de liens entre ces boites, avec éventuellement une liste de liens dans chaque boite histoire d'aller vite).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    bonjour

    Les sources sont disponibles ici

    le fichier gedcom n'est pas compressé, donc c'est 3mo de données à mémoriser, mais je ne pense pas qu'il a été écrit dans un but d'économiser de la mémoire.

    Dans l'exemple qu'ils donnent pour l'utilisation, la sorties sont des tableaux d'objets. Il y a plusieurs tableau (individus, famille, notes, événement, .. qui sont eux même constitué d'objets. Je suis convaincu, qu'ils dupliquent les objets pendant les traitements.

    je penche de plus en plus à réécrire cette libraire, et ne couvrir que ce qui m’intéresse. dans mon cas, 3mo, c'est un petit fichier contenant 3000 individus, certains fichier en contiennent 40000.

    a+ et merci pour ton aide
    Page sur Developpez : http://pbriand.developpez.com

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Fais un démon avec la commande Debug.getNativeHeapAllocatedSize().
    Tu peux aussi regarder (l'un n'exclue pas l'autre) l'utilisation mémoire via le DDMS (lance l'application, choisi le processus et clic sur l'icône en forme de cylindre vert au-dessus), et va sur l'onglet ... Heap ? Je ne sais plus trop son nom.

    Aussi, pourrais-tu mettre l'erreur, histoire de bien confirmer le OOM
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour

    voici ce que j'ai noté:

    Debug.getNativeHeapAllocatedSize() = Au lancement j'ai 3440152 jsute après l'affichage de ma fenetre principal.


    Du coté DDMS, j'ai

    Heap size: 23.945 MB
    Allocated: 22.492 MB
    Free: 1.453 MB
    % Used: 93.93%
    #Objects: 468435

    et la copie du log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    06-26 13:16:08.830: I/dalvikvm-heap(329): Forcing collection of SoftReferences for 2204-byte allocation
    06-26 13:16:09.439: I/dalvikvm-heap(329): Clamp target GC heap from 24.988MB to 24.000MB
    06-26 13:16:09.439: D/dalvikvm(329): GC_FOR_MALLOC freed 327 objects / 13088 bytes in 612ms
    06-26 13:16:10.790: E/dalvikvm-heap(329): Out of memory on a 2204-byte allocation.
    06-26 13:16:10.790: I/dalvikvm(329): "main" prio=5 tid=1 RUNNABLE
    06-26 13:16:10.800: I/dalvikvm(329):   | group="main" sCount=0 dsCount=0 s=N obj=0x4001d8e0 self=0xccb0
    06-26 13:16:10.800: I/dalvikvm(329):   | sysTid=329 nice=0 sched=0/0 cgrp=default handle=-1345026008
    06-26 13:16:10.809: I/dalvikvm(329):   | schedstat=( 1304230686257 88479561263 25473 )
    06-26 13:16:10.809: I/dalvikvm(329):   at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:~97)
    06-26 13:16:10.809: I/dalvikvm(329):   at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:157)
    06-26 13:16:10.809: I/dalvikvm(329):   at java.lang.StringBuffer.append(StringBuffer.java:215)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.GedcomLine.createTextFromGedcom(GedcomLine.java:762)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.GedcomLine.createTextFromGedcom(GedcomLine.java:825)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.record.SourceRecord.create(SourceRecord.java:431)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.GedcomParser.handleLine(GedcomParser.java:183)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.GedcomParser.importGedcomFile(GedcomParser.java:137)
    06-26 13:16:10.809: I/dalvikvm(329):   at org.familysearch.gedcomparser.GedcomParser.importGedcomFile(GedcomParser.java:66)
    06-26 13:16:10.809: I/dalvikvm(329):   at com.bpy.android.genealog.gedcom.GedcomManager.parseFile(GedcomManager.java:26)
    06-26 13:16:10.809: I/dalvikvm(329):   at com.bpy.android.genealog.GenealogActivity.onCreate(GenealogActivity.java:21)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.os.Handler.dispatchMessage(Handler.java:99)
    06-26 13:16:10.822: I/dalvikvm(329):   at android.os.Looper.loop(Looper.java:123)
    06-26 13:16:10.829: I/dalvikvm(329):   at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-26 13:16:10.829: I/dalvikvm(329):   at java.lang.reflect.Method.invokeNative(Native Method)
    06-26 13:16:10.840: I/dalvikvm(329):   at java.lang.reflect.Method.invoke(Method.java:521)
    06-26 13:16:10.840: I/dalvikvm(329):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-26 13:16:10.840: I/dalvikvm(329):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-26 13:16:10.840: I/dalvikvm(329):   at dalvik.system.NativeStart.main(Native Method)
    Page sur Developpez : http://pbriand.developpez.com

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Merci.

    Ah tiens, 24 Mo. Quel est ton terminal de test, si ce n'est pas indiscret ? C'est la première fois que je vois une limite aussi basse.

    OOM confirmée, pour le coup. Là, je ne pense pas qu'il soit possible de faire autrement que de faire son propre parseur pour lire ce format (en espérant que celui-ci soit facilement compréhensible ...).
    J'aurai aussi l'idée du code compilée via NDK ... mais je ne sais absolument pas si ça pourrait apporter quelque chose ici.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  9. #9
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    merci pour ta réponse

    Comme toi, je pense que je vais écrire mon propre parseur. Comme je n'ai pas besoin d'implémenter toute le norme, il va être plus simple et moins gourmand en mémoire.

    Voici ma target:

    CPU/ABI: ARM
    target : Galaxy tab Addon (API level 8)
    Skin galaxy tab
    J'ai défini une Sdcard de 2 GO


    J'ai pris celle ci car j'ai un Samsung galaxy 5.0 wifi. C'est la même version d'android. Pour le moment, je n'ai pas trouver de définir pour ma tablette toute faite. (ecran 800 * 480)
    Page sur Developpez : http://pbriand.developpez.com

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Tu peux le créer... de toute pièces
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Ah tiens, 24 Mo. Quel est ton terminal de test, si ce n'est pas indiscret ? C'est la première fois que je vois une limite aussi basse.
    Quand je pense qu'au début on se battait avec 16 Mo .

    Si tu veux créer ton propre parser vu la taille de tes données il serait intéressant de se tourner vers le Sax
    http://developer.android.com/referen...e-summary.html
    Le Sax te permet de parser ne partie du fichier sans lire sa globalité .

    Après pour le programme que tu as utilisais , prendre plus de 20 mo Pour parser un fichier de 3 Mo, ce n'est pas trop normal :/ il y aurait surement des choses à revoir la dessus également.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

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

Discussions similaires

  1. [Python 2.X] gestion de gros fichier
    Par vincenlnx dans le forum Général Python
    Réponses: 10
    Dernier message: 22/11/2014, 15h42
  2. Réponses: 26
    Dernier message: 30/09/2014, 16h57
  3. gestion de gros fichiers en C++
    Par buzzkaido dans le forum C++
    Réponses: 6
    Dernier message: 07/08/2012, 12h16
  4. Gestion des (gros) fichiers
    Par schneed dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/02/2009, 20h05
  5. [Composants texte] Gestion de gros fichiers
    Par sozie9372 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 22/05/2006, 11h03

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