Generation de picture box supra lente...

Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
-
Bonsoir a tous!!

Alors voila j'ai un problème qui commence a me taper sur les nerfs : pour une application j'ai besoin d'afficher toute les images du disque dur dans des picture box de facon a les avoir toute sous les yeux en meme temps. Pour cela j'ai donc une classe qui me permet de créer et d'ajouter une picture box a maform, classe inspirée d'un code trouvé sur ce site (je me souviens plus ou mais c'etait à la base prévu pour des boutons). Le problème c'est que s'il y a qques images tout se passe bien mais si je fais le test avec des centaines d'images plus ou moins grosses, l'ordi rame sévère et finit par planter....Est ce que qqun aurait une solution pour optimiser tout ca ou un bout de code parce que la....Merci d'avance!!!

PiLoU

5 réponses

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
C'est normal.


La question qu'il faut se poser est la suivante : Est-ce qu'on est capable de visualiser toutes les images d'un disque dur sur une Form sans utiliser de scroll bars? la réponse est non.


La solution est de charger les adresses (file path) de toutes les images et d'afficher seulement 6 (ou autre nombre) à la fois. Il ne sert à rien d'afficher les 12 440 images en même temps.


Tu peux aussi utiliser les threads pour éviter le plantage.


Bonne continuation

[:D] @++
Messages postés
36
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
17 juillet 2007

Merci de t'interesser à mon pb!!!!Alors en fait j'ai mis sur la form les scrollbar auto donc on px bien voir toute les images ^^
J'ai essayer d'utiliser les thread mais il me sort une lorsque dans le thread je veux affecter l'image à la picturebox : un truc du genre le thread en cours ne peut pas acceder à un objet (ma picturebox) créer depuis un autre thread...Bon j'ai bien penser à la solution d'afficher 6 images a la fois mais a la base l'effet voulut etait un mur d'image miniatures...Enfin je crois qu'au final je vais me tourner vers cette soltuion!!!Merci en tout cas!!

PiLoU
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
De rien,


Pour ton problème de thread, MorpionMx en parle ici dans ce tutorial : http://www.csharpfr.com/tutoriaux/CSHARP-OPERATIONS-CROSS-THREADS-UTILISATION-DELEGATIONS-SYNCHRONES-ASYNCHRONES_174.aspx

Les contrôles WinForms (PictureBox, Button, ...) ne sont pas thread-safe. En d'autres termes, ils ne doivent être manipuler que par le thread qui les a créer. Dans le tutorial, Morpion explique comment acceder à des contrôles d'une manière sécuritaire à partir d'un autre thread.

C'est une lecture interressante.
Bonne chance.

[:D] @++
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
27 octobre 2012
42
Salut, la PictureBox c'est sympa pour afficher 1 ou 2 images sur ta forme, mais c'est un contrôle ça prend de la place en mémoire et beaucoup de code est executé à chaque ajout d'une PB dans ta forme. Si tu developpes une application qui manipule beaucoup d'images, faut envisager de dessiner sois même les images directement sur la forme ou sur un Contrôle. Pour les miniatures tu peux utiliser une ListView.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
Salut,

Sans parler du fait que le PictureBox est un contrôle, et qu'en tant que contrôle il possède un handle, qui est une ressource limitée.
Si je ne me trompe pas : 65536 par session, 10000 par processus (par défaut, extensible jusque 18000).

/*
coq
MVP Visual C#
CoqBlog
*/