为什么WPF UserControl的性能如此差异主机进入WPF应用程序并赢取表单应用程序?

时间:2010-10-09 07:38:21

标签: wpf winforms performance

这是我的问题:

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

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

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

  1. 我创建了一个WPF UserControl(在ListBox中),名称是“wpfUserControl1”。
  2. 我将“wpfUserControl1”放入窗体中。
  3. 我设置了wpfUserControl1.listBox.ItemsSource = Employee []。
  4. 立即显示员工对象。

    //表现非常好!

  5. 我创建一个WPF应用程序

    1. 我创建了一个MainWindow对象。
    2. 我将一个ListBox放到mainWindow。
    3. 我设置了listBox.ItemsSource = Employee []。
    4. 加载速度非常慢,并且出现了超常的异常。

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

    5. 我怀疑是:

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

1 个答案:

答案 0 :(得分:1)

它可能与虚拟化有关吗?例如,WPF数据网格默认情况下已启用虚拟化,但是如果将数据网格放置在堆栈面板中并且不提供任何宽度/高度限制,那么您实际上会使虚拟化无效,因为堆栈面板允许数据网格无限增长,因此必须为数十万件物品创建DataGridRows。

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

尝试为您的usercontrol或mainwindow设置特定的宽度/高度,看看性能是否会更好......