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

VB.NET Discussion :

Aide pour améliorer les performances Checkbox


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 33
    Points
    33
    Par défaut Aide pour améliorer les performances Checkbox
    Bonjour,
    Je viens vers vous car j’ai un sérieux problème de performances aussi bien processeur que mémoire. (mon appli prend 1Go de RAM.... )
    Je ne peux poster mon code source car j’ai des contraintes de confidentialités vis-à-vis de mon client.
    Je vous explique :
    Je dois réaliser un soft qui permet de faire certains calculs sur des matrices.
    L’affichage de ces matrices doit se faire « à plat ». Chaque cellule doit avoir un effet visuel (comme lorsqu’on passe au dessus avec la souris) et être sélectionnable.
    La matrice la plus grande est une 30 x 60 ce qui revient à 1800 cellules à afficher.
    J’ai donc opté pour la solution graphique la plus lourde à mon gout :
    Sur la form de fond, j’ai appliqué un flowlayoutpanel, dans lequel j’ai inséré 1800 checkbox avec les propriétés selon l’image en pièce jointe de ce message.
    Je ne suis pas un pro de VB, mais plus du c++, du coup j’ai un peu de mal avec la lourdeur de certains objets graphique. (J’ai aussi eu la contrainte du langage)
    Vous comprenez ainsi que gérer 1800 checkbox est extrêmement lourd.
    Pour connaître quelle cellule de la matrice est sélectionnée, j’utilise la solution de parcourir tous les objets du flowlayoutpanel et de vérifier que c’est une checkbox et quel est son état. (solution assez efficace plutôt que de gérer les 1800 objets indépendamment ^^ )
    Connaissez-vous une méthode qui serait plus légère ? Ou peut-être des objets déjà tout fait à utiliser ? Je ne veux pas utiliser de datagridview, car il me faut pouvoir obtenir l’effet visuel que vous pouvez voir sur l’image en pièce jointe (vue_d_ensemble.jpg)

    Je suis preneur de toute idée afin de pouvoir améliorer cette interface graphique !! (j’ai déjà modifié le fichier form.designer afin de ne pas avoir de nouvel objet font et padding pour tous les éléments, ça m’a fait gagner déjà quelques perfs !)
    Si jamais cela s’avère nécessaire, je pourrai toujours réaliser une petite application VB ne contenant que l’interface graphique sans le code confidentiel !
    Je vous remercie par avance,

    nbrau
    Images attachées Images attachées   

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je ne veux pas utiliser de datagridview, car il me faut pouvoir obtenir l’effet visuel que vous pouvez voir sur l’image en pièce jointe (vue_d_ensemble.jpg)
    Tu peux personnaliser l'affichage du Datagridview en traitant l'événement CellPainting.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    je viens de lire la doc vb à propos de cet événement, en effet ça pourrait être une bonne idée.
    Sais-tu s'il est possible d'avoir un espace entre chaque cellule? comme sur ma capture d'écran?

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Sais-tu s'il est possible d'avoir un espace entre chaque cellule? comme sur ma capture d'écran?
    En mettant CellBorderStyle à None, ca devrait le faire. Ensuite, tu fais toi-mème les rectangles qui entourent les textes en dessinant la cellule (ou tu définis les columns comme de type checkbox et tu laisses le DGV les dessiner en standard).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    je viens de faire quelques essais et ça me parait pas mal comme solution, j'ai encore un peu de travail pour obtenir le rendu voulu a 100%
    Sinon j'ai remarqué que lorsque je créais les lignes dans la DGV et que je les effaçais via la méthode .clear ou rowcount = 0 la mémoire ne se libérait pas.
    J'ai fait le test après plusieurs déchargement, mais rien, aucun changement l'utilisation de la mémoire continue à grimper.
    Sais-tu comment faire dans ces conditions? car à terme il va y avoir du dépassement mémoire

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    c'est le fonctionnement normal de .net
    la mémoire est libérée de manière automatique par le garbage collector
    quand windows manque de mémoire le gc est appelé et vide la mémoire

    tu peux quand meme forcer le gc à passer via gc.Collect, mais cette instruction peut prendre un peu de temps (la lancer dans un thread séparé éventuellement)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 44
    Points : 33
    Points
    33
    Par défaut
    ok super, tu m'as filé une très bonne solution, je vais pouvoir avancer et arrêter de me casser la tête sur les perf de l'interface graphique
    merci encore !!

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

Discussions similaires

  1. Index pour améliorer les performances
    Par Ceubex dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/09/2014, 22h08
  2. Astuces pour améliorer les performances
    Par amira dans le forum Langage
    Réponses: 10
    Dernier message: 29/03/2013, 10h24
  3. Réponses: 4
    Dernier message: 28/10/2011, 19h44
  4. Paramètres pour améliorer les performances du serveur
    Par abdou_ci dans le forum Administration
    Réponses: 7
    Dernier message: 15/05/2008, 14h43
  5. Optimisation de jsp pour améliorer les performances
    Par djuddju dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/12/2006, 05h50

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