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

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

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

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

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

15.12.2008 13:35:59
4 ОТВЕТА
РЕШЕНИЕ

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

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

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

21
15.12.2008 14:10:43
Я бы сказал, что объекты WPF имеют меньший вес из-за разреженной инфраструктуры хранения WPF. Значения свойств зависимостей сохраняются только в том случае, если они отличаются от значений по умолчанию, поэтому достигается значительная экономия памяти.
Kent Boogaart 15.12.2008 14:23:19
Мне любопытно и немного пессимистично по поводу производительности на терминальном сервере.
Guge 15.12.2008 14:48:52
Как и должно быть, Гуге. WPF отправляет графику, а не примитивные команды или токены, представляющие элементы управления. AFAIK, Microsoft также не взяла на себя никаких обязательств по исправлению этой ситуации.
Kent Boogaart 15.12.2008 14:51:23

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

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

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

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

Пару интересных блогов я читал раньше.

Сообщение Джона

Сообщение Роба

6
15.12.2008 14:07:20

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

3
15.12.2008 15:19:58

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

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

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

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

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

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

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

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

1
15.01.2019 16:23:43