Какой имеет более быструю производительность во время выполнения: WPF или Winforms?

Я знаю, что WPF более сложен, гибкое так, как могли думать, сделало больше вычислений. Но так как рендеринг сделан на GPU, разве это не было бы быстрее, чем Winforms для того же приложения (функционально и визуально)?

Я имею в виду, когда Вы не выполняете игр или тяжелого 3-го рендеринга, GPU не делает тяжелой работы, правильно? Принимая во внимание, что ЦП всегда занят.

Действительно ли это - допустимое предположение или является использованием GPU WPF очень незначительная операция в ее конвейере?

Править: Приложение, что мне интересно, является 3-м программным обеспечением моделирования и анимации, где у Вас есть 3-и области просмотра, чтобы переместиться и отредактировать сцену и объекты в сцене. Но я хочу использовать WPF из-за его современной архитектуры, и это с нуля.

EDIT2: Также в моих целях я буду использовать DirectX, передает для самого приложения из-за требований высокого класса программного обеспечения. Что касается людей, использующих более низкий уровень или компьютеры без специализированного GPU, это в порядке, так как они не находятся не в моей основной клиентской области. Точно так же, как другое высококачественное 3-е программное обеспечение для фильма и игр, будет понятно потребовать, чтобы мощный компьютер полностью извлек выгоду из приложения.

14
задан Joan Venge 26 March 2010 в 18:22
поделиться

5 ответов

Если на машине есть графический процессор, вы получите лучшую производительность рендеринга в WPF.

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

Мы также обнаружили, что «элементы управления» WPF более легкие, чем элементы управления WinForm. Если я правильно помню, элементы управления WPF не обязательно требуют дескриптора операционной системы и не регистрируются для оконных сообщений Windows через WndProc, по крайней мере, независимо.

В вашем случае, поскольку вы создаете приложение для 3D-моделирования, которое предполагает наличие на компьютере некоторого 3D-оборудования, вам обязательно следует использовать WPF вместо WinForms.

18
ответ дан 1 December 2019 в 07:51
поделиться

Что касается описываемого вами сценария приложения, я ожидаю, что WPF значительно превзойдет WinForms для работы с 3D на полнофункциональном графическом процессоре.

Разница между типами приложений заключается не только в рендеринге конвейера трехмерных векторов. Внутренняя архитектура WPF радикально отличается от WinForms, специально разработанной для преодоления предостережений, извлеченных из многолетнего опыта работы с приложениями Windows GDI и WinForms.

(WinForms - это относительно тонкая оболочка для Windows GDI и модели User, которая была первоначально создана в конце 1980-х. Модель управления Windows User развивалась за последние 25 лет, но основные архитектурные шаблоны в основном не изменились.)

Например, WPF всегда отделяет визуализацию пользовательского интерфейса от логики приложения. Когда окно WPF собирается что-то отрисовать, фактический рендеринг происходит в фоновом потоке. Обновленные визуальные эффекты переворачиваются на дисплей во время интервала обратного просмотра видео, поэтому на экране не появляются частичные блики или «разрывные» артефакты.

WinForms этого не делает. Если вы выполняете рендеринг на поверхности DirectX или OpenGL в приложении WinForms, вам нужно выполнить работу по переворачиванию страницы видео и убедиться, что это происходит в нужное время, чтобы избежать артефактов разрыва экрана.

Стандартные элементы управления Wpf поддерживают графический процессор и могут иметь индивидуальный стиль с использованием свечения, прозрачности и прочего с ускорением на графическом процессоре. Элементы управления WinForms не получают значительных преимуществ от функций графического процессора, поскольку WinForms (пользовательские элементы управления Windows) практически не использует для рендеринга двухмерные битовые биты и заливку прямоугольников. Свечение, прозрачность, анимация - все это возможно с WinForms, но вы должны проделать всю работу по их реализации.

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

7
ответ дан 1 December 2019 в 07:51
поделиться

Это действительно сложный вопрос.

Огромная часть производительности WPF - это ваш графический процессор. Хороший графический процессор творит чудеса, заставляя WPF работать хорошо. WPF может быть очень производительным. Если ваши требования заключаются в том, чтобы иметь приличный графический процессор, поскольку это программа для 3D-моделирования, вы, вероятно, обнаружите, что производительность WPF такая же или лучше, чем у Windows Forms, хотя это действительно зависит от того, что вы используете.

При этом обычно трудно сравнивать - в основном потому, что WPF позволяет добавлять множество визуальных эффектов, которые люди, как правило, даже не пытаются использовать в Windows Forms. Многие приложения WPF «кажутся» быстрее, хотя в некоторых случаях они на самом деле медленнее из-за дополнительных визуальных подсказок.

При этом, если у вас МНОГО элементов управления, WPF действительно может значительно превзойти Windows Forms. В Windows Forms каждый элемент управления требует отдельного дескриптора окна и получает свои собственные наборы сообщений. Благодаря большому количеству элементов управления это может значительно замедлить работу.

Настоящий вопрос здесь должен заключаться в перфомансе WPF. "достаточно хорошо" для вашего приложения. Если вы делаете приложение для 3D-моделирования, скорее всего, WPF не будет вашим узким местом - все должно быть в порядке.

6
ответ дан 1 December 2019 в 07:51
поделиться

Для 3D-моделирования WPF явно лучше, чем WinForms - но он все еще далек от идеала. Winforms вообще не имеет (прямой) поддержки 3D рендеринга, а WPF имеет некоторую. Однако для программы, нацеленной в первую очередь на 3D-рендеринг, лучше выбрать что-то более специализированное для задач 3D-рендеринга, например, OpenGL или Direct3D.

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

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

2
ответ дан 1 December 2019 в 07:51
поделиться

Поскольку WPF фактически использует DirectX под капотом, а также тот факт, что вы используете XAML для указания объектов DirectX, WPF является самым простым решением.

Пример кодирования камеры в xaml :

<PerspectiveCamera x:Key="Camera"
 Position="0, 0, 4"
 LookDirection="0, 0, -4"
 UpDirection="0, 1, 0"
 FieldOfView="30"/>
1
ответ дан 1 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: