Bonjour,
Je rencontre un problème de libération de la mémoire dans mon application Silverlight 4. J'ai lu plusieurs post mais j'ai du mal à comprendre le bug...
Pour un test, j'ai créé 1 TabControl et 3 Boutons
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <sdk:TabControl Grid.Row="2" Grid.ColumnSpan="3" x:Name="TabMain"/> <Button Content="Add" Margin="187,4,0,0" Click="buttonAdd_Click" /> <Button Content="Delete" Margin="268,4,0,0" Click="buttonDelete_Click" /> <Button Content="Force GC" Click="buttonForceGC_Click" />
Dans mon code behind voici, l'implémentation des méthodes _Click:
Ensuite, je lance l'application : au début j'ai un processus (IExplorer) à ~97.000 Ko. Je clique sur le bouton Add et je passe à ~220.000 Ko.
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 private void buttonAdd_Click(object sender, RoutedEventArgs e) { for (int i = 0; i <= 1500; i++) { TabItem myItem = new TabItem() ; TabMain.Items.Add(myItem); TabMain.SelectedItem = myItem; } } private void buttonDelete_Click(object sender, RoutedEventArgs e) { for (int i = 1500; i >= 0; i--) { TabItem myItem = (TabItem)TabMain.SelectedItem; myItem.Content = null; myItem.Header = null; TabMain.Items.Remove(myItem); GC.SuppressFinalize(myItem); GC.Collect(); } } private void buttonForceGC_Click(object sender, RoutedEventArgs e) { GC.Collect(); }
Ensuite je clique sur Delete et IExplorer passe à ~160.000Ko et je n'ai plus de TabItem dans le TabControl.... Et quand je clique sur Force GC la mémoire ne descend pas. Pourquoi je ne redescens pas au 97.000 Ko du début?
Les TabItems sont t'ils toujours en mémoire à cause d'un event... ou parce qu'ils ne sont pas déclarer dans un DataTemplate.....
Le test est fait sur des TabItems vide mais normalement je dois intégrer des UserControl qui demande plus de ressources.
J'avouerais que je ne sais plus trop ou chercher sur le sujet, si quelqu'un a déjà eu ce problème ou connait la solution je serais enchanté que vous m'aidiez.
Merci,
Julien,
Partager