【发布时间】:2010-09-15 13:06:24
【问题描述】:
我在 WPF 窗口中有网格,里面有一个 DataGrid 控件:
<Grid>
<DataGrid ItemsSource="{Binding AllAuthors}" />
</Grid>
AllAuthors 是 ObservableCollection<Author> 和 Author 一个只有几个字符串属性的简单类。该集合在后面的代码中填充了大约 40000 个对象。 DataGrid 会很快打开(1 秒后),并且通过 datagrid 的导航非常顺畅和快速。该应用程序的内存负载为 35 MB。
如果我将上面的代码替换为 ...
<StackPanel>
<DataGrid ItemsSource="{Binding AllAuthors}" />
</StackPanel>
...当应用程序尝试显示 DataGrid 时,应用程序以 100% 的 CPU 负载运行,内存不断增长到 1.5 GB。最后我收到了OutOfMemoryException。
我是 WPF 初学者,现在想知道这里出了什么问题。 (我使用的是 VS2010、.NET 4.0 和 WPF 4.0 的内置 DataGrid 控件)
提前感谢您的帮助!
【问题讨论】:
-
你帮我找到了我的问题:我使用 Task.run() 管理所有内容,当我“更新”我的收藏并提高 OnPropertyChanged() 时,该工具同样崩溃行为(最大 RAM,outofMemoryException)。我搜索了几个小时以了解我的 c# 代码中出了什么问题,但最后,这是由于 UI 线程创建了一个巨大的堆栈面板!谢谢
标签: wpf datagrid wpfdatagrid stackpanel