【问题标题】:Slow WPF 4 Datagrid Refresh慢 WPF 4 数据网格刷新
【发布时间】:2011-05-11 12:27:28
【问题描述】:

我正在使用 .NET 4 框架中的 WPF DataGrid 组件,它绑定到我在这里找到的线程安全可观察集合:http://www.deanchalk.me.uk/post/Thread-Safe-Dispatcher-Safe-Observable-Collection-for-WPF.aspx

该程序是一个系统管理工具,它对某个范围内的每个 IP 地址进行 ping 操作,如果有响应,它会在集合中创建一个对象,其中包含来自计算机的一些详细信息。

我遇到的问题是性能不佳。最初,我只是更新集合并让数据网格获取更改。这导致了一个问题,即除非我滚动,否则 DataGrid 控件不会刷新和显示数据。

所以我添加了一个计时器来调用网格刷新方法,计时器每 750 毫秒计时一次。这非常有效,直到我意识到程序 UI 在启用计时器并且正在扫描时完全没有响应。

没有计时器,性能是可以接受的,没有它,它很糟糕。我已经尝试了几个超时时间的值(最多 2000 毫秒),但没有任何运气,并且还确保我的列是固定宽度(我读到自动生成的列和宽度会导致性能问题)。

网格中的行数约为 300 - 400 5 列,因此它并不是一个巨大的网格。

在不牺牲性能的情况下,是否有人对我如何让网格在添加后面的集合时及时更新有任何建议?

【问题讨论】:

    标签: c# wpf performance data-binding datagrid


    【解决方案1】:

    如果您的绑定正确,则无需手动刷新 DataGrid。更新幕后的 observable 集合应该会自动触发(假设您已实现 NotifyPropertyChanged)DataGrid 的更新。 300 - 400 不是一个会减慢 DataGrid 的数字。您的 DataGrid 在 ScrollViewer 内吗?有时这也会降低性能。确保您的绑定工作正常,然后您就不需要手动刷新。

    【讨论】:

    • 谢谢@haris,我已经在我的班级中实现了 INotifyPropertyChanged 接口,现在网格可以很好地更新而无需刷新。
    • INotifyPropertyChanged 是个好东西!谢谢!
    猜你喜欢
    • 2016-07-06
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2018-09-13
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多