【问题标题】:Why WPF UserControl's performance is so difference host into WPF application and win form application?为什么 WPF UserControl 在 WPF 应用程序和 win 窗体应用程序中的性能差异如此之大?
【发布时间】:2011-02-28 05:32:33
【问题描述】:

这是我的问题:

我在数据库中有 200,0000 个员工对象(Id、Name、Job、Address)存储。

我将所有 Employee 对象读给 Empolyee[]。

我创建了一个窗体应用程序:

  1. 我创建了一个 WPF 用户控件(在 ListBox 内),名称是“wpfUserControl1”。

  2. 我把“wpfUserControl1”放到了一个窗体中。

  3. 我设置 wpfUserControl1.listBox.ItemsSource = Employee[]。

  4. 员工对象立即显示。

    // 性能非常好!

我创建了一个 WPF 应用程序

  1. 我创建了一个 MainWindow 对象。

  2. 我将一个 ListBox 放到 mainWindow 中。

  3. 我设置 listBox.ItemsSource = Employee[]。

  4. 加载速度很慢,出现outofmeory异常。

    // 如果我加载 1000 个对象,性能太慢了!

我的疑问是:

为什么同一个 WPF UserControl 被托管到 WinFormApp 和 WpfApp 中,它的性能差异如此之大?

【问题讨论】:

    标签: wpf winforms performance


    【解决方案1】:

    这可能与虚拟化有关吗?例如,WPF 数据网格默认开启了虚拟化,但是如果您将数据网格放置在堆栈面板中并且不提供任何宽度/高度限制,那么您可以有效地取消虚拟化,因为堆栈面板允许数据网格无限增长,因此必须为数十万个项目创建 DataGridRows。

    我只是猜测您的用户控件可能会发生相同的效果。在 WinForms 中,宿主控件可能会提供特定的宽度/高度限制,并且不允许用户控件无限增长。另一方面,在 WPF 中,根据 WpfApp 的 MainWindow 的定义方式,用户控件可能会无限增长。

    尝试为您的用户控件或主窗口设置特定的宽度/高度,看看性能是否变得更好......

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2012-10-18
      相关资源
      最近更新 更多