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 :

Boucle, instanciation d'objet et garbage collector


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Boucle, instanciation d'objet et garbage collector
    Bonjour, je suis débutant en Java & Android, lors du développement de mon application j'ai rencontré un soucis avec les boucles et le garbage collector.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        private List<ContentValues> addObjects(ResultSet rst) throws DaoException, SQLException {
            //Ajout dans la BDD local SQLlite
            List<ContentValues> values = new ArrayList<>();
            ContentValues value = new ContentValues();
            while (rst.next()) {
                value.put("Numero", rst.getInt("Numéro"));
                value.put("AR_Ref", rst.getString("AR_Ref"));
                value.put.....
                .........;
                values.add(new ContentValues(value));  
            }
            return values;
        }
    Ce code marche parfaitement mais le new ralentit fortement mon application, en effect à chaque fois le GC vient passer dessus et prend 300ms environ, l’exécution prend 3 minutes ce qui est énorme.
    J'aimerai profiter de vos expériences pour optimiser ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1230K, 5% free 62021K/64839K, paused 377ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1223K, 5% free 62033K/64839K, paused 367ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1222K, 5% free 62044K/64839K, paused 401ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1220K, 5% free 62056K/64839K, paused 412ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1220K, 5% free 62067K/64839K, paused 418ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1285K, 5% free 62080K/64903K, paused 420ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1293K, 5% free 62092K/64903K, paused 428ms
    D/dalvikvm﹕ GC_FOR_ALLOC freed 1283K, 5% free 62104K/64903K, paused 420ms
    Merci d'avance pour votre aide

  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
    Je pense qu'il y a un problème mémoire ailleurs... 62Mo déjà utilisés par ton appli c'est énorme.

    D'autant que sous Android, le GC se fait en 3 phases, et que la première est quasi instantannée.

    Un petit coup de view de la mémoire occupée au moment d'entrée ici permettrait de savoir quels objets occupent tant de place. Les rares fois ou cela m'est arrivé c'était un problème de context-leak.... mais bon....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour, j'ai trouvé une solution a mon problème, en enlevant le new et en insérant directement en BDD au lieu de faire une List.
    Je suis passé de 3 minutes à 45 secondes.

  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
    Ca n'empêche qu'il y a un problème de mémoire !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonsoir, le problème de mémoire venait du New dans la boucle, maintenant l'appli est passé de 60Mo à 3Mo

  6. #6
    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
    Haaa mais attends... il y a combien d'objets dans la boucle ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    J'aurai dû le préciser mais c'est un chargement de 40 000 objets, de combien et le temps moyen pour faire 40 000 insert ? Moi j'arrive à 45 secondes.

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

Discussions similaires

  1. Destruction d'objets Dispose() Garbage Collector
    Par Pascal_F dans le forum VB.NET
    Réponses: 14
    Dernier message: 04/10/2013, 13h52
  2. Le nombre d'objet à collecter par le garbage collector
    Par TaymouWan dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/12/2009, 17h41
  3. Réponses: 9
    Dernier message: 06/05/2008, 17h10
  4. Garbage Collector/libération objets référencés
    Par LeSmurf dans le forum Général Java
    Réponses: 3
    Dernier message: 17/12/2006, 19h47
  5. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57

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