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

Composants FMX Delphi Discussion :

Comment créer un frame dynamiquement sans avoir un problème de mémoire ?


Sujet :

Composants FMX Delphi

  1. #1
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Points : 43
    Points
    43
    Billets dans le blog
    1
    Par défaut Comment créer un frame dynamiquement sans avoir un problème de mémoire ?
    Bonjour à tous !
    Je me suis lancé dans le projet de créer une liste de Frame, dynamiquement. Les frames seront créés dans un TVertScrollBox qui sera donc le parent de mes TFrames. Je pourrais ainsi ajouter sur mes TFrames créés dynamiquement des composants enfants (TImage,TLabel...). Le problème ne se situe pas principalement au niveau de la création de mes TFrames. Mais au niveau de la mémoire. Je redoute que la création de 500 Frames dynamiquement avec ses enfants, ne puisse consommé trop de mémoire sur mon téléphone Android.

    1- Comment donc faire pour éviter une surconsommation de la mémoire avec la création de TFrame illimité ?
    2- Comment éviter les mauvaise rafraichissement lors du défilement des TFrames et de ses composants.

    PS :
    - TFrame stock principalement des images qui seront chargés elles aussi dynamiquement depuis une base de donnée.
    - Application est multiplateforme et doit tourné sur Android principalement et Windows.

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Pas vraiment de solution : plus on crée des objets, plus on consomme de la mémoire. C'est la base de la programmation.

    Pour éviter de saturer, il faut recycler.

    Si en plus on a des images en quantité il est vital de les dégager dès que possible.

    Quand des éléments ne sont pas affichés à l'écran il faudrait soit les réutiliser, soit les éliminer. Idéalement il serait pratique de n'avoir que le nombre de cadres nécessaires à l'affichage +1 (selon la vitesse d'affichage, de chargement des données censées être traitées, la hauteur de chaque élément, etc). Quand l'un d'eux est au dessus ou en dessous de l'écran, on l'alimente avec les infos censées être de l'autre côté et on le déplace. C'est plus une programmation économe qu'on retrouve dans le développement de jeux vidéo que dans les applications bureautiques, mais ça n'empêche pas de l'implémenter quand on fait tout à la main.

  3. #3
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Points : 43
    Points
    43
    Billets dans le blog
    1
    Par défaut
    Merci beaucoup M. Patrick !!! En effet je veux mettre en place un système de cardview comme le fait l'application Android FacebooK. La particularité du mien est qu'il doit être entièrement personnalisable en UI.
    https://cdn.dribbble.com/users/13348...esize=1200x900

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    oui l'idée c'est de ne pas tout avoir en mémoire en effet

    même s'il n'est pas nécessaire de se limiter à ce qui est visible + 1, ça peut être une 20ène, une 50ène ... bref un nombre fixe, et quand on scroll, on vient placer ces éléments à une position adaptée et remplir les champs avec les données de l'enregistrement en question...c'est d'autant plus simple à faire si la frame est de taille fixe....mais sinon ça reste faisable.

    l'autre approche, que j'ai tendance à utiliser sous VCL, c'est de dessiner manuellement les éléments sans passer par des composants.

    ça me fait penser à libPDFium, dans le reader j'ai la taille de toutes les pages, et une procédure LoadVisiblesPages qui s'assure que les pages visibles à l'écran sont accessibles, et pour gérer leur durée de vie, je considère que si une page est invisible depuis plus de 5 affichages, elle peut être supprimée. Dans le Paint je regarde si ce qui est visible à changé et je lance le dessin des pages visibles. Donc potentiellement le PDF peut contenir des centaines de pages, seules les quelques pages qui ont été affichées récemment sont en mémoire.

    Là c'est la DLL qui dessine les pages, mais j'ai une classe TPDFPage qui peut correspondre à ta Frame.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 58
    Points : 43
    Points
    43
    Billets dans le blog
    1
    Par défaut
    Cela me ferait beaucoup plaisir M. Paul ! Est-ce que je peux l'utiliser en FMX, c'est en effet pour une application Android que j'aimerais le développer. Néanmoins si cela nécessite une adaptation c'est pas de refus.

    PS : Si vous pouvez nous apprendre le principe cela serait encore plus cool !!
    Merci pour vos réponses.

Discussions similaires

  1. [WB10] comment créer une frame
    Par magneau dans le forum WebDev
    Réponses: 1
    Dernier message: 30/04/2007, 23h52
  2. [reports] comment créer une requete dynamiquement
    Par lifeisgood dans le forum Reports
    Réponses: 4
    Dernier message: 31/01/2007, 12h15
  3. [XSL] Comment créer un XPATH dynamique en XSL?
    Par oliviercuyp dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 13/12/2006, 16h14
  4. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 09h53

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