Salut tous le monde ,
SVP y'a t-il moyen de faire du calcul parallel ?, j'ai beaucoup de controls a afficher par code (par boucle) et qui prennent beaucoup beaucoup de temps a s'afficher (environ 15 jusqu'a 20sec).
merci de votre aide
Version imprimable
Salut tous le monde ,
SVP y'a t-il moyen de faire du calcul parallel ?, j'ai beaucoup de controls a afficher par code (par boucle) et qui prennent beaucoup beaucoup de temps a s'afficher (environ 15 jusqu'a 20sec).
merci de votre aide
Si c'est pour afficher des contrôles je dirais non vu qu'il n'y a qu'un seul thread qui peut jouer avec les contrôles.
Tu affiches tous tes contrôles sur ta page en même temps ? Tu as pensé à faire un peu de virtualization ? Ou au moins cacher les contrôles qui ne sont pas dans la zone visible.
15 à 20 secondes pour afficher tes contrôles, cela me parait énorme.
As-tu essayé la virtualisation, comme le suggère Skyounet ? Sinon, c'est l'affichage des contrôles qui est lent ou la récupération des données ?
ok , je vais chercher sur la virtualisation .
maintenant je l'ai testé sur une autre machine et ça m'a pris 1min25sec (:calim2:) ,
au fait je developpe une application SIG et je dois afficher des controls de type Bouton par code ( je dois les afficher tous (environ 5000elements)).
question : peut-on appliquer la virtualisation sur tous les conteneurs ?
PS : Thomas ton blog est vraiment riche , je trouve souvent des solutions sur to blog ? :ccool:
si , je dois les afficher tous en meme temps .
j'essaie d'appliquer la virtualisation sur une listBox mais ça retourne une erreur :
mon code :Citation:
La propriété Set 'System.Windows.Controls.VirtualizingStackPanel.IsVirtualizing' a levé une exception
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <ListBox x:Name="ListLayer1" BorderBrush="{x:Null}" VirtualizingStackPanel.IsVirtualizing="True" > <ListBox.ItemTemplate> <sdk:HierarchicalDataTemplate> <StackPanel Orientation="Horizontal" > <CheckBox x:Name="ckbVisibility" Tag="{Binding NAME}" ToolTipService.ToolTip="Set the visibility of this Cell"/> <HyperlinkButton x:Name="txtLabel" Content="{Binding NAME, Mode=OneWay}" Margin="4,0,10,0" /> </StackPanel> </sdk:HierarchicalDataTemplate> </ListBox.ItemTemplate> </ListBox>
Tu as 5000 boutons tous visibles en même temps ? Ils doivent pas être bien gros alors.
La virtualization fonctionne seulement si certaines parties ne sont pas visible (comme dans une ListBox où tu ne vois que 10 éléments alors qu'il y en a peut-être 100 dedans).
Je sais pas si tu l'as déjà fait, mais tu pourrais faire ton propre bouton (une version plus light que la version de base) ce qui réduira surement le temps de chargement
Une application SIG, c'est bien un Système d'information géographique ?
Que dois tu faire avec ces 5000 controls ? Affichage seulement ou interaction ?
Les 5000 controles sont-ils toujours visibles et changent t'ils souvent de place ?
Tu pourrais, plutot que de gerer des controles lents à dessiner, créer un WriteableBitmap sur lequels tu dessines, une seule fois, tes 5000 boutons (dessiner pas ajouter :) ). Pour gérer les clicks il suffit lorsque tu cliques sur le Bitmap de faire referer le point de la souris à un tableau de rectangle qui correspond aux positions des boutons. Ca devrait accélerer énormement ton application.
Peux-tu préciser ta définition d'un SIG et approfondir les raisons pour les quelles cette méthode ne peut pas fonctionner.
un SIG c'est bien un systeme d'informations geographiques ,
dans un SIG il y a des zoom in et des zoom out donc un objet n'est pas fixe dans des pixels bien definis ce qui me permet pas d'utiliser la methode dont tu m'as proposé.
C'est pour cela que je t'avais demandé
Citation:
Les 5000 controles sont-ils toujours visibles et changent t'ils souvent de place ?
ah oui , j'ai dis qu'ils ne changent pas de place par rapport au SIG (par leur longitude et latitude).
pour l'erreur généré sur la virtualisation des items ListBox et Combobox quelqu'un a une idee sur le probleme ?
une autre petite question : quel est l'objet le plus leger dans silverlight ? (pour que je puisse remplacer les boutons sachant je les modifie pour qu'ils prennent la forme d'une fleche avec un Rotate et un ToolTip).
merci .
On ne peut pas activer la virtualization comme ça (d'ailleurs on t'a dit qu'elle était activé par défaut). Me semble que ça lance un NotImplementedException.
Peut-être un Path, mais je suis pas sûr.Citation:
une autre petite question : quel est l'objet le plus leger dans silverlight ? (pour que je puisse remplacer les boutons sachant je les modifie pour qu'ils prennent la forme d'une fleche avec un Rotate et un ToolTip).
Tu peux faire du parallele en Silverlight en utilisant F#