2017-08-17 18 views
0

在我的C#WPF应用程序中,我有一个包含约900000个条目的对象列表。有很多条目的WPF ListView:System.OutOfMemoryException

我想在列表视图中显示这些条目。为此,我创建一个如下窗口:

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

该列表存储在ViewModel中。该XAML的样子:

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

有没有在为ListView项的限制:

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

      <ListView.View> 
... 

在行myWin.Show()以下异常程序冻结和节目吗?我知道900,000条目似乎非常多,但这是我商业案例中常见的条目数量。

+0

显然你没有足够的内存来处理那么多项目。确保您没有禁用UI虚拟化。 – mm8

+0

可能有多个问题。看看这里:https://stackoverflow.com/questions/5326904/finding-the-true-memory-footprint-of-a-windows-application/5407911#5407911 –

+1

也许是时候开始分页/层次数据/ [/ “在这里不显示整个列表”技术]。无论那些900000项目是什么,用户永远不会需要在单个程序运行期间查看所有这些项目(假定程序不会在没有重新启动的情况下永远运行),所以最好的选择是了解用户将会实际上是在寻找他何时开始滚动浏览这些荒谬可笑的项目列表。 – grek40

回答

0

感谢您的答案。我使用this manual来构建适当的虚拟化。这对我有用。

-1

不是一个完整的答案,但是你首先要看看如何虚拟化ListView。

这是一个良好的开端:

How to enable UI virtualization in Standard WPF ListView

+0

默认情况下,为ListView控件启用UI虚拟化... – mm8

+0

我不会停用ui虚拟化,因此我假定它已启用。就像mm8提到的一样 –