我正在使用.NET 4框架中的WPF DataGrid组件,它绑定到我在此处找到的线程安全可观察集合:http://www.deanchalk.me.uk/post/Thread-Safe-Dispatcher-Safe-Observable-Collection-for-WPF.aspx
该程序是一个系统管理工具,可以在一个范围内ping每个IP地址,如果有响应,它会在集合中创建一个具有计算机详细信息的对象。
我遇到的问题是性能不佳。最初,我只是更新Collection并让datagrid获取更改。这导致了一个问题,即DataGrid控件没有刷新并显示数据,除非我滚动。
所以我添加了一个计时器来调用网格刷新方法,计时器每750ms计时一次。这非常有效,直到我意识到在启用计时器并且正在扫描时,程序UI完全没有响应。
没有计时器,性能是可以接受的,没有它,它的可怕性。我已经尝试了几个值超时期间(最多2000毫秒)没有任何运气,并且还确保我的列是固定宽度(我读到自动生成的列和宽度可能会导致性能问题)。
网格中Row的数量约为300-400,有5列,所以它不是一个巨大的网格。
有没有人有任何关于如何在不牺牲性能的情况下及时更新网格的建议?
答案 0 :(得分:4)
如果绑定正确,则无需手动刷新DataGrid。更新场景后面的可观察集合应该自动触发(假设您已经实现了NotifyPropertyChanged)DataGrid的更新。 300 - 400不是一个会减慢DataGrid速度的数字。你的DataGrid在ScrollViewer中吗?有时也会降低性能。确保您的绑定工作正常,然后您不需要手动刷新。