我的要求是在不同的网格和图表上的WPF应用程序中显示大约1000万条记录/秒。看起来WPF GUI线程无法赶上这么多数据。 我在一个单独的线程(网络线程)上接收数据,并通过从网络线程引发集合更改和属性更改事件来更新视图模型集合。 此外,数据更新与数据添加一样频繁,例如10百万/条记录可能有数千万条数据更新。
The approach i am following is given below
Model Collection -> receives the data from network thread
Model Collection -> raises collection changed event
View Model -> on collection changed event dispatch the data to UI Thread.
任何解决方案我都可以避免冻结GUI,显示那么多记录。
答案 0 :(得分:2)
您可以通过不在UI中显示1000万行来避免UI冻结。没有人会给你一个现成的解决方案......你有很多工作要做。但是,我可以把你带到正确的道路上。你有几个可能的选择。
有一些名为Virtualization
的东西内置于许多WPF集合控件中。这会尝试将显示为,就像所有项目都在您的控件中一样,但它确实静默加载显示的小组项目并处理其他项目刚刚失去了展示。这是您最简单的选项,您可以在MSDN上的Optimizing Performance: Controls页面上找到更多信息。
我能想到的唯一其他选择是数据分页。它几乎以同样的方式工作,除了你必须手动实现代码并且它不会像所有数据都被加载一样出现...只会在一个页面上加载一页数据时间。您可以在CodeProject的DataView Paging in WPF页面中找到详细的说明/教程。
最后一点可能会有所帮助,你可能应该为这些项定义一个简单的DataTemplate
,甚至可能只是Textblock
...如果每个项目都有一个复杂的UI要呈现,那么将需要更长的时间。祝你好运,显示你的1000万行。