none
Problème de performances avec un grand nombre de checkbox (VB Express 2008) RRS feed

  • Question

  • Bonjour,

    Je viens vers vous car j’ai un sérieux problème de performances aussi bien processeur que mémoire.

    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,

    Voici les captures d'écran :

    http://braubrau.free.fr/vb/vue_d_ensemble.jpg

    http://braubrau.free.fr/vb/proprietes.jpg

    nbrau

    mardi 10 novembre 2009 21:36

Réponses

  • j'avoue y avoir pensé, mais je pense qu'il doit être "plus léger" pour l'appli de tout charger une première fois au démarrage que de les créer ou de les supprimer dynamiquement. (là c'est une question de perf réactionnelle)
    Je me penche sur une autre méthode actuellement, on m'a parlé de l'événement cellpainting du datagridview, et ça m'a l'air pas trop mal pour obtenir un effet visuel comme celui que je recherche :)
    De plus il y a des options que je ne connaissais pas vraiment : enlever tous les styles, les en-têtes de colonne et de ligne, mettre des checkbox ou bouton à la place des cellules, etc

    Mais en parallèle je continue mes recherches !
    Merci

    nbrau
    mercredi 11 novembre 2009 09:29

Toutes les réponses

  • Bonjour,

    Ne serait il pas mieux de faire un modèle et de généré dynamiquement les contrôles et les évènements dans le flowlayoutpanel ?
    Cordialement, Troxsa
    mercredi 11 novembre 2009 09:03
    Auteur de réponse
  • j'avoue y avoir pensé, mais je pense qu'il doit être "plus léger" pour l'appli de tout charger une première fois au démarrage que de les créer ou de les supprimer dynamiquement. (là c'est une question de perf réactionnelle)
    Je me penche sur une autre méthode actuellement, on m'a parlé de l'événement cellpainting du datagridview, et ça m'a l'air pas trop mal pour obtenir un effet visuel comme celui que je recherche :)
    De plus il y a des options que je ne connaissais pas vraiment : enlever tous les styles, les en-têtes de colonne et de ligne, mettre des checkbox ou bouton à la place des cellules, etc

    Mais en parallèle je continue mes recherches !
    Merci

    nbrau
    mercredi 11 novembre 2009 09:29
  • Oui, cela peut être plus performant avec une DataGrindView
    Bonne continuation
    Cordialement, Troxsa
    mercredi 11 novembre 2009 10:27
    Auteur de réponse