Почему производительность WPF UserControl так сильно отличается от приложения WPF и приложения Win Form? - PullRequest
1 голос
/ 09 октября 2010

Это мой вопрос:

У меня есть 200,0000 объектов Employee (Id, Name, Job, Address), хранящихся в базе данных.

Я прочитал весь объект Employee в Empolyee [].

Я создаю приложение в форме окна:

  1. Я создаю WPF UserControl (внутри ListBox), имя - "wpfUserControl1".
  2. Я ставлю "wpfUserControl1"в форме окна.
  3. Я установил wpfUserControl1.listBox.ItemsSource = Employee [].
  4. Объекты Employee были отображены сразу.

    // Производительность очень хорошая!

Я создаю приложение WPF

  1. Я создаю объект MainWindow.
  2. Я помещаю ListBox в mainWindow.
  3. Я установил listBox.ItemsSource = Employee [].
  4. Скорость загрузки очень низкая и возникает исключение из памяти.

    // Если я загружаю 1000 объектов, производительность слишком высокаямедленно!

Я сомневаюсь:

Почему один и тот же WPF UserControl был размещен в WinFormApp и WpfApp.разница в производительности настолько велика?

1 Ответ

1 голос
/ 10 октября 2010

Может быть, это как-то связано с виртуализацией? Например, в сетке данных WPF виртуализация включена по умолчанию, но если вы поместите сетку данных в панель стека и не предоставите никаких ограничений ширины / высоты, то вы фактически аннулируете виртуализацию, так как панель стека позволяет сетке данных расти бесконечно, что создать DataGridRows для сотен тысяч элементов.

Я просто предполагаю, что тот же эффект может происходить с вашим пользовательским контролем. В WinForms управление хостингом, вероятно, предусматривает определенные ограничения ширины / высоты и не позволяет бесконечно расти пользовательскому контролю. В WPF, с другой стороны, в зависимости от того, как определено MainWindow вашего WpfApp, пользовательский контроль может расти бесконечно.

Попробуйте установить конкретную ширину / высоту для вашего пользовательского элемента управления или главного окна и посмотрите, улучшится ли производительность ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...