je grille dans une fenêtre WPF et un contrôle DataGrid intérieur:DataGrid dans un StackPanel conduit à OutOfMemoryException
<Grid>
<DataGrid ItemsSource="{Binding AllAuthors}" />
</Grid>
AllAuthors
est un ObservableCollection<Author>
et Author
une classe simple avec seulement quelques propriétés de chaîne. La collection est peuplée d'environ 40000 objets en code derrière. Le DataGrid s'ouvre assez rapidement (après 1 seconde) et la navigation dans le DataGrid se fait en douceur et rapidement. L'application a une charge de mémoire de 35 Mo.
Si je remplace le code ci-dessus par ...
<StackPanel>
<DataGrid ItemsSource="{Binding AllAuthors}" />
</StackPanel>
... l'application fonctionne avec une charge de 100% du CPU et de la mémoire se développe sans interruption jusqu'à 1,5 Go tandis que l'application tente d'afficher le Grille de données. Enfin, je reçois un OutOfMemoryException
.
Je suis débutant WPF et je me demande maintenant ce qui ne va pas ici. (J'utilise VS2010, .NET 4.0 et le contrôle DataGrid intégré de WPF 4.0)
Merci de votre aide à l'avance!
Vous m'avez aidé à localiser mon problème: je gérais tout avec Task.run(), et quand je "mettais à jour" ma collection et élevais OnPropertyChanged(), l'outil plantait avec le même comportement (max RAM, outofMemoryException). Je cherchais des heures pour comprendre ce qui n'allait pas dans mon code C#, mais finalement, c'était dû au thread de l'interface utilisateur qui créait un énorme stackpanel! merci – Simon