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

Wicket Java Discussion :

Consommation mémoire avec ImageIO.read


Sujet :

Wicket Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Consommation mémoire avec ImageIO.read
    J'ai une application client-serveur qui lit des images sur le serveur pour la transmettre au client et créer un thumbnail. Elle fonctionne correctement, mais en bridant volontairement a xmx64m, je suis en Java Heap. Au dessus de deux utilisateurs de l'appli, je suis mort. Comment faire ?
    Dernière modification par tchize_ ; 17/04/2011 à 13h31.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourrais-ton voir le code incriminé? Faites attention que certaines méthode de l'api swing gardent en cache les images qu'on leur demande de charger, pour des raisons de performance.

    Avec imageIO, assurez vosu que setUseCache est mis à true pour qu'il stocke ses données temporaires sur le disque et non pas en mémoire.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Voici la partie de code :

    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
     public ResourceReference getThumbnailResource(final File im) {
     
            return new ResourceReference(im.getName() + "_out.png") {
     
                @Override
                public AbstractResource getResource() {
                    final BufferedDynamicImageResource resource = new BufferedDynamicImageResource();
                    BufferedImage bi = null;
                    try {
                        bi = ImageIO.read(im);
                        bi = resizeImg2(bi, SIZEX, SIZEY);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    resource.setImage(bi);
                    bi = null;
                    return resource;
                }
            };
        }
    Dernière modification par Invité ; 18/04/2011 à 10h06.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Rien à signaler dans votre code, c'est probablement du coté de l'appelant du code que se situe la perte. Vous transmettez l'objet Image généré comment au client? Via un ObjectOutputStream?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui c'est un ObjectOutputStream qui transfére client lourd mais c'est pas tant ce qui pose problème. Le problème c'est surtout sur la partie web géré par wicket avec ce code appelant :

    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
    GridView<FileDescriptor> gridView = new GridView<FileDescriptor>("rows", dataProvider) {
                @Override
                protected void populateItem(Item<FileDescriptor> item) {
                    //final Image image = new Image("image", getThumbnailResource(new File(getWorkDirRoot() + "/" + item.getModelObject().getDataFileName())));
     
                    ResourceReference ref = getThumbnailResource(new File(getWorkDirRoot() + "/" + item.getModelObject().getDataFileName()));
                    final ResourceReference ref2 = ref;
                    Image image = new Image("image", ref2) {
                        @Override
                        protected void onComponentTag(final ComponentTag tag) {
                            CharSequence url = RequestCycle.get().urlFor(ref2, new PageParameters());
                            checkComponentTag(tag, "img");
                            tag.put("src", url);
                        }
                    };

Discussions similaires

  1. Consommation mémoire d'un istream.read()
    Par Matthieu Brucher dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2010, 14h56
  2. Consommation mémoire hallucinante avec glob()
    Par mobscene dans le forum Langage
    Réponses: 8
    Dernier message: 24/01/2007, 18h29
  3. Réponses: 2
    Dernier message: 13/12/2004, 23h32
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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