Сравнение производительности Winforms и WPF - PullRequest
16 голосов
/ 15 декабря 2008

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

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

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

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

Ответы [ 4 ]

21 голосов
/ 15 декабря 2008

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

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

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

6 голосов
/ 15 декабря 2008

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

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

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

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

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

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

Пост Роба

3 голосов
/ 15 декабря 2008

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

1 голос
/ 15 января 2019

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

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

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

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

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

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

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

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

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