Какой из них имеет более высокую производительность во время выполнения: WPF или Winforms?
Я знаю, что WPF более сложный, гибкий, поэтому можно подумать о том, чтобы делать больше вычислений. Но поскольку рендеринг выполняется на графическом процессоре, не будет ли он быстрее Winforms для одного и того же приложения (функционально и визуально)?
Я имею в виду, что когда вы не запускаете никаких игр или тяжелых 3D-рендеринга, GPU не делает тяжелую работу, не так ли? Если CPU всегда занят.
Является ли это допустимым предположением или использует GPU для WPF очень незначительную операцию в своем конвейере?
EDIT: приложение, которое меня интересует, представляет собой 3d-моделирование и анимационное программное обеспечение, в котором у вас есть 3D-видовые экраны для навигации и редактирования сцены и объектов внутри сцены. Но я хочу использовать WPF из-за своей современной архитектуры, и это с нуля.
EDIT2: Также для моих целей я буду использовать DirectX для самого приложения из-за высоких требований к программному обеспечению. Что касается людей, использующих нижний конец или компьютеры без выделенного графического процессора, это нормально, так как они не находятся в моей основной области клиентов. Так же, как и другие высококачественные 3D-программы для фильмов и игр, будет понятно, что требуется мощный компьютер для полного использования приложения.
Ответы
Ответ 1
Если у машины есть графический процессор, вы получите лучшую производительность рендеринга в WPF.
У нас есть большое настольное приложение, которое мы написали в WinForms, и теперь переносим в WPF. Мы стали свидетелями гораздо лучшей производительности рендеринга, особенно при изменении размера окон или элементов управления перерисованием.
Мы также обнаружили, что элементы управления WPF более легкие, чем элементы управления WinForm. Если я правильно помню, элементы управления WPF не обязательно требуют дескриптора операционной системы и не регистрируются для оконных сообщений Windows через WndProc, по крайней мере, не независимо.
В вашем случае, так как вы создаете приложение для 3D-моделирования, какое из них предполагает наличие 3D-оборудования на компьютере, вы должны абсолютно использовать WPF над WinForms.
Ответ 2
В описываемом сценарии приложения WPF будет превосходить WinForms для работы 3D на полнофункциональном графическом процессоре с большим отрывом.
Разница между типами приложений больше, чем просто рендеринг 3D-конвейера. Внутренняя архитектура WPF радикально отличается от WinForms, специально разработанной для преодоления предостережений, полученных из многолетнего опыта работы с приложениями Windows GDI и WinForms.
(WinForms - относительно тонкая оболочка вокруг модели Windows GDI и User, которая была первоначально создана в конце 1980-х годов. Модель управления пользователями Windows изменилась за последние 25 лет, но основные архитектурные шаблоны в основном не изменились.)
Например, WPF всегда отделяет отображение пользовательского интерфейса от логики приложения. Когда окно WPF начинает рисовать что-то, фактический рендеринг происходит в фоновом потоке. Обновленные изображения перевернуты на дисплей во время интервала повторения видео, поэтому вы не получаете частичные блики или "разрывающие" артефакты на экране.
WinForms ничего не делает. Если вы перенесите на DirectX или OpenGL поверхности в приложение WinForms, вам нужно выполнить работу по перелистыванию видеостраницы и убедиться, что это происходит в нужное время, чтобы избежать искажений при разрыве экрана.
Элементы управления по умолчанию в формате Wpf обладают поддержкой графического процессора и могут быть оформлены в обычном режиме с помощью свечения и прозрачности и еще не все ускоренные GPU. Элементы управления WinForms не приносят существенного эффекта от функций графического процессора, так как об использовании только тех, которые WinForms (средства управления Windows) используют для рендеринга, являются двухбитовые битовые и прямоугольные заполнения. Свечение, прозрачность, анимация возможны с помощью WinForms, но вы должны выполнить всю работу по их реализации.
В WPF UI slickness - это в основном вопрос проектирования и стилизации, чтобы заставить WPF сделать это за вас. В WinForms вы должны сами нажимать пиксели.
Ответ 3
Это очень трудный вопрос для ответа.
Огромная часть производительности WPF - это ваш GPU. Хороший графический процессор создает чудеса для того, чтобы WPF работал хорошо. WPF может быть очень результативным. Если ваши требования должны иметь достойный графический процессор, так как это программа 3D-моделирования, вы, вероятно, найдете, что производительность WPF будет такой же хорошей или лучшей, чем Windows Forms, хотя это действительно зависит от того, что вы используете.
Считается, что его обычно трудно сравнивать - в основном потому, что WPF позволяет добавлять много визуальных эффектов, которые люди, как правило, даже не пытаются в Windows Forms. Многие приложения WPF "кажутся" быстрее, хотя в некоторых случаях они более медленны из-за дополнительных визуальных подсказок.
При этом, если у вас есть много элементов управления, WPF может фактически превзойти Windows Forms на справедливую сумму. В Windows Forms каждый элемент управления требует отдельного дескриптора окна и получает свои собственные наборы сообщений. С большим количеством элементов управления это может существенно замедлить работу.
Реальный вопрос здесь должен быть WPF perf. "достаточно хорошо" для вашего приложения. Если вы делаете приложение для 3D-моделирования, скорее всего, WPF не будет вашим узким местом - все должно быть хорошо.
Ответ 4
Для 3D-моделирования WPF, безусловно, намного лучший выбор, чем WinForms, но он все еще долгий путь от идеала. Winforms не имеет (прямой) поддержки для 3D-рендеринга вообще, и у WPF есть некоторые. Тем не менее, для программы, ориентированной прежде всего на 3D-рендеринг, вам может быть лучше посвятить себя задачам 3D-рендеринга, таким как OpenGL или Direct3D.
Сам по себе ни один из них не дает огромного преимущества перед WPF, но если вы не будете достаточно специализированным, я бы не использовал их напрямую. Я бы использовал что-то вроде OpenSceneGraph или Ogre3D, который может использовать любой из них для его рендеринга, но обеспечивает гораздо более высокий уровень интерфейса и делает больше для управления рендерингом вашей сцены.
Либо, либо оба из них, вероятно, могут использовать WPF для фактического чертежа, но я уверен, что ни один из них не работает, по крайней мере в настоящее время. Я не знаю, будут ли они когда-либо - они могут, но я сомневаюсь, что это реальный приоритет, поскольку они уже поддерживают OpenGL и Direct3D. Для их целей WPF дает мало преимуществ.
Ответ 5
Увидев, что WPF фактически использует DirectX под капотом и тот факт, что вы используете XAML для указания объектов DirectX, WPF на сегодняшний день является самым простым решением.
Пример кодирования камеры в xaml:
<PerspectiveCamera x:Key="Camera"
Position="0, 0, 4"
LookDirection="0, 0, -4"
UpDirection="0, 1, 0"
FieldOfView="30"/>