2017-08-17 1 views
0

Dans mon application C# WPF, j'ai une liste d'objets avec environ 900000 entrées.WPF ListView avec de nombreuses entrées: System.OutOfMemoryException

Je souhaite afficher ces entrées dans une vue de liste. Pour cela je crée une nouvelle fenêtre comme ceci:

System.Windows.Window myWin = new System.Windows.Window(); 
    myWin.Content = new myResult(); 
    myWin.Title = "Result"; 
    myWin.Show(); 

La liste est stockée dans le ViewModel. Le XAML ressemble:

 <ListView 
      x:Name="myListView" 
      ItemsSource="{Binding ListSummary}" 
      > 

      <ListView.View> 
... 

Au cours de la ligne myWin.Show() le gel du programme et des spectacles suivants exception:

Ein Ausnahmefehler des Typs "System.OutOfMemoryException" ist in PresentationCore.dll aufgetreten. 

Y at-il une limitation des entrées pour le listview? Je sais que 900 000 entrées semblent être beaucoup, mais c'est le nombre commun d'entrées dans mon analyse de rentabilisation.

+0

Apparemment, vous n'avez pas assez de mémoire pour gérer autant d'éléments. Assurez-vous que vous n'avez pas désactivé la virtualisation de l'interface utilisateur. – mm8

+0

Peut-être qu'il y a plus d'un problème. Jetez un coup d'oeil ici: https://stackoverflow.com/questions/5326904/finding-the-true-memory-footprint-of-a-windows-application/5407911#5407911 –

+1

Il est peut-être temps de commencer à paginer/des données hiérarchiques/[ "ne montrez pas toute la technique" ici]. Peu importe ce que sont ces 900 000 éléments, un utilisateur n'aura jamais besoin de les examiner tous au cours d'un seul programme (supposé que le programme ne fonctionne pas éternellement sans redémarrage). Votre meilleur choix est de comprendre ce que l'utilisateur sera recherche en fait quand il commence à faire défiler cette liste ridiculement énorme d'articles. – grek40

Répondre

0

Merci pour toutes vos réponses. J'ai utilisé this manual pour construire une virtualisation correcte. Cela fonctionne pour moi.

-1

Pas une réponse complète, mais vous voulez commencer par regarder comment virtualiser le ListView.

Ceci est un début prometteur:

How to enable UI virtualization in Standard WPF ListView

+0

La virtualisation de l'interface utilisateur est activée par défaut pour le contrôle ListView ... – mm8

+0

Je ne désactive pas la virtualisation de l'interface utilisateur, donc je suppose qu'elle est activée. tout comme mm8 mentionné –