【问题标题】:GUI freez WPF Business application to display 10 millions records per second [closed]GUI freez WPF Business 应用程序每秒显示 1000 万条记录 [关闭]
【发布时间】:2013-11-28 15:13:45
【问题描述】:

我的要求是在不同的网格和图表上的 WPF 应用程序中显示大约 1000 万条记录/秒。看起来 WPF GUI 线程无法赶上这么多数据。 我在一个单独的线程(网络线程)上接收数据,并通过从网络线程引发集合更改和属性更改事件来更新视图模型集合。 此外,数据更新与数据添加一样频繁,例如对于 1000 万/条记录,可能会有 1000 万条数据更新。

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 并显示这么多记录。

【问题讨论】:

  • 你有什么问题?
  • @Sheridan 你打败了我。我正要问同样的问题。
  • 谁能够每秒查看 1000 万条记录?
  • 问题是如何避免冻结 gui 并显示这么多记录。
  • 您应该考虑的第一件事是您只更新显示给用户的可见数据。

标签: c# wpf multithreading performance


【解决方案1】:

您可以通过在您的 UI 中显示 1000 万行来避免 UI 冻结。没有人会给你一个现成的解决方案......你有很多工作要做。但是,我可以让你走上正确的道路。您有几个可能的选择。

有一个名为Virtualization 的东西内置在许多 WPF 集合控件中。这试图使其 显示 就好像您的所有项目都在您的控制之下,但它实际上 静默 加载显示中的小组项目并处理其他具有刚刚消失了。这是您最简单的选择,您可以从 MSDN 上的Optimizing Performance: Controls 页面了解更多信息。

我能想到的唯一其他选择是数据分页。它的工作方式几乎相同,除了您必须手动实现代码并且它不会看起来好像所有数据都已加载......一次只会加载一页数据。您可以在 CodeProject 的 DataView Paging in WPF 页面中找到详细的说明/教程。

最后一点可能会有所帮助,您可能应该为项目定义一个相当简单的DataTemplate,甚至可能只是一个Textblock...更长。祝您好运,显示您的 1000 万行。

【讨论】:

  • 我在网格上使用虚拟化,数据模板很复杂,但主要障碍是我显示的图表。超过 70% 的调度程序被图表控件使用。
  • 对此我无能为力。
猜你喜欢
  • 1970-01-01
  • 2019-06-19
  • 2010-09-08
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多