Сравнение производительности Winforms и WPF

Поскольку XAML компилируется, не должно быть разницы в выполнении кода, подобного этому.
Winforms (код как):

Form formPeter = new Form();
Textbox textbox = new Textbox();
Label l1 = new Label1();

Xaml не анализируется во время выполнения, как я думал...:-)

Но как насчет рендеринга/исполнения больших форм с большим количеством элементов управления? Какая технология быстрее?

Ответы

Ответ 1

Какая технология быстрее? Боюсь, что у вашего вопроса нет простого ответа.

Ваш комментарий о том, что XAML не анализируется во время выполнения, является истинным и ложным. В то время как XAML не обрабатывается нормализованная двоичная версия (встроенная как ресурс в вашем приложении), называемая BAML , анализируется во время выполнения. Сказать, что DirectX быстрее, чем GDI, также является чем-то вроде упрощения. Технологии рендеринга WPF и GDI имеют только различные характеристики производительности. Например, WPF использует сохраненный режим рендеринга, тогда как WinForms и другие технологии на базе GDI этого не делают. Объекты WPF имеют тенденцию быть гораздо более тяжелыми, потому что они поддерживают множество многих других свойств, чем их партнеры по winforms. У нас есть многолетние знания о том, как сделать GDI довольно быстрым, и только относительно короткое время с WPF и XAML.

WPF достаточно быстро для написания приложений, но вам нужно постоянно проявлять бдительность в том, что ваш счетчик элементов не сбрасывается (например, создавая слишком сложные шаблоны, а затем повторяя их сотни или тысячи раз в пользовательском интерфейсе), Кроме того, WPF работает по-разному на разных графических аппаратных средствах (поскольку он обращается к DirectX внутренне). 2D-контент должен быть хорошим в WPF, даже если он полностью отображается в программном обеспечении (скажем, так, как это было бы на виртуальной машине), но анимированный, сглаженный 3D-режим с множеством элементов требует реальной мощности GPU. По мере того, как время движется вперед, а графическое оборудование становится более мощным и распространенным, а знания о том, как повысить производительность WPF, мы должны увидеть, как WPF продвигается вперед (при условии, что это немного сейчас... для некоторых сценариев... иногда). Поэтому я думаю, что ответ "зависит".

Ответ 2

WPF использует DirectX для рендеринга (что намного быстрее) вместо родного Windows GDI.

Как вы уже знаете, Native GDI основан на растровых изображениях. Поскольку WPF основан на векторе, WPF может использовать аппаратную поддержку намного лучше по сравнению с GDI.

Как бы то ни было, решение выбрать WPF или Winforms в большой степени зависит от других факторов: гибкость, которая вам нужна в пользовательском интерфейсе, сколько средств массовой информации поддерживает ваше приложение и т.д. WPF не является заменой Winforms - и это не серебряная пуля для всех проблем.

С появлением дополнительных возможностей аппаратного ускорения WPF может обеспечить гораздо лучшую производительность, чем ваши приложения Winform.

Несколько интересных блогов, которые я читал элайнер.

John Post

Rob Post

Ответ 3

Рисунок WPF выполняется намного быстрее, но объекты более тяжелые. Если вы нажмете 1000 отдельных кнопок, они будут сканироваться. С другой стороны, эти кнопки могут иметь сложную прозрачность и градиенты без значительного повышения производительности.

Ответ 4

Производительность WPF vs Winforms больше не является основным критерием.

Я знаю, что этот вопрос задавался ранее, но с учетом .NET 4.x и улучшений, которые сделали WPF более производительным, сообщество считает, что производительность больше не является критерием выбора одной технологии перед другой.

В целом настольные приложения WPF работают значительно лучше, чем эквивалентный код WinForms, в сценариях, требующих сложного пользовательского интерфейса, настройки стилей и сценариев с интенсивным использованием графики, из-за нескольких архитектурных преимуществ WPF над WinForms:

  • Лучшее использование графического процессора
  • Сохраненный режим рендеринга
  • Более эффективное связывание данных. Более эффективное построение дерева объектов.
  • Более эффективное использование оперативной памяти (с помощью DependencyObject)
  • Меньший программный код

Однако оба они работают достаточно быстро, поэтому я не думаю, что производительность станет основной причиной выбора WPF вместо WinForms. Это будет возможность быстрее создавать лучшие приложения.

Разработчики игр и другие, которым нужна максимальная производительность, не будут использовать WPF или WinForms для критических частей своего пользовательского интерфейса: они будут программировать для Direct3D или даже для аппаратного обеспечения.

В этой статье описываются платформы (UWP, WPF и Windows Forms) и помогает вам определить лучшую для вашего приложения.

Для модульного тестирования Winforms первое, что вы должны сделать, это убедиться, что вы правильно отделили свою бизнес-логику от формы. В основном, с использованием шаблона MVC. Затем вы можете легко протестировать все, что находится вне формы, как если бы форма даже не существовала.