C# WPF和Winforms哪个运行时性能更快?

C# WPF和Winforms哪个运行时性能更快?,c#,.net,wpf,winforms,performance,C#,.net,Wpf,Winforms,Performance,我知道WPF更复杂,更灵活,所以可以考虑做更多的计算。但是,既然渲染是在GPU上完成的,那么对于同一个应用程序(功能上和视觉上)它不是比Winforms更快吗 我的意思是,当你不运行任何游戏或繁重的3d渲染时,GPU也不会做繁重的工作,对吗?而CPU总是很忙 这是一个有效的假设,还是GPU对WPF的利用在其管道中是一个非常小的操作 编辑:我感兴趣的应用程序是一个3d建模和动画软件,其中有3d视口来导航和编辑场景,以及场景中的对象。但我想使用WPF,因为它的现代架构,而且是从头开始的 EDIT2:

我知道WPF更复杂,更灵活,所以可以考虑做更多的计算。但是,既然渲染是在GPU上完成的,那么对于同一个应用程序(功能上和视觉上)它不是比Winforms更快吗

我的意思是,当你不运行任何游戏或繁重的3d渲染时,GPU也不会做繁重的工作,对吗?而CPU总是很忙

这是一个有效的假设,还是GPU对WPF的利用在其管道中是一个非常小的操作

编辑:我感兴趣的应用程序是一个3d建模和动画软件,其中有3d视口来导航和编辑场景,以及场景中的对象。但我想使用WPF,因为它的现代架构,而且是从头开始的


EDIT2:出于我的目的,由于软件的高端需求,我将在应用程序本身中使用DirectX。至于使用低端或没有专用GPU的计算机的人,这没关系,因为他们不在我的主要客户区。就像其他用于电影和游戏的高端3d软件一样,需要一台功能强大的计算机才能充分利用该应用程序是可以理解的。

如果该机器具有GPU,您将在WPF中获得更好的渲染性能

我们有一个用WinForms编写的大型桌面应用程序,现在正在移植到WPF。我们已经看到了更好的渲染性能,特别是在调整窗口大小或重画控件时

我们还发现WPF“控件”比WinForm控件更轻量级。如果我没记错的话,WPF控件不一定需要操作系统句柄,也不通过WndProc注册Windows窗口消息,至少不是独立注册的


对于您的情况,因为您正在构建一个3d建模应用程序,这类应用程序假定机器上有一些3d硬件,所以您绝对应该使用WPF而不是WinForms。

这是一个很难回答的问题

WPF性能的很大一部分是您的GPU。一个好的GPU能让WPF表现出色。WPF可以非常高效。如果您的需求是有一个像样的GPU,因为它是一个3D建模程序,您可能会发现WPF的性能与Windows窗体一样好或更好,尽管这实际上取决于您使用的是什么

也就是说,通常很难进行比较——主要是因为WPF允许您添加许多人们在Windows窗体中从未尝试过的视觉效果。许多WPF应用程序“看起来”更快,尽管在某些情况下,由于额外的视觉线索,它们实际上更慢

也就是说,如果你有很多控件,WPF实际上可以比Windows窗体好很多。在Windows窗体中,每个控件都需要一个单独的窗口句柄,并接收自己的消息集。有了大量的控件,这实际上可以大大降低速度


这里真正的问题应该是WPF性能。对你的申请来说“足够好”。如果你正在做一个3D建模应用程序,WPF很可能不会成为你的瓶颈-应该没问题。

对于3D建模,WPF显然比WinForms好得多-但离理想状态还有很长的路要走。Winforms根本不支持(直接)3D渲染,WPF也有一些支持。然而,对于一个主要针对3D渲染的程序,最好使用一些专门用于3D渲染任务的工具,例如OpenGL或Direct3D

就其本身而言,这两种方法都不能提供比WPF更大的优势,但除非您所做的是相当专业的,否则我不会直接使用它们。我会使用类似于或的东西,可以使用其中任何一种进行渲染,但提供了更高级别的界面,并在管理场景渲染方面做了更多工作


这两种方法中的任何一种或两种都可能在实际绘图中使用WPF,但我很确定这两种方法都没有,至少目前是这样。我不知道他们是否会——他们可能会,但我怀疑这是一个真正的优先事项,因为他们已经支持OpenGL和Direct3D。就其目的而言,WPF几乎没有什么优势。

鉴于WPF实际上在幕后使用DirectX,而且您使用XAML指定DirectX对象,WPF是迄今为止最简单的解决方案

:


对于您描述的应用程序场景,我希望WPF在全功能GPU上的3D工作表现会大大优于WinForms

应用程序类型之间的区别不仅仅是渲染3D向量管道。WPF的内部架构与WinForms完全不同,专门设计用于克服多年来使用Windows GDI和WinForms应用程序的经验中所学到的注意事项

(WinForms是Windows GDI和用户模型的一个相对较薄的包装,最初创建于20世纪80年代末。Windows用户控制模型在过去25年中不断发展,但核心架构模式基本上没有改变。)

例如,WPF总是将UI呈现与应用程序逻辑分离。当WPF窗口开始绘制某些内容时,实际渲染在背景线程上进行。在视频回溯间隔期间,刷新的视觉效果会翻转到显示器上,因此您不会在屏幕上看到部分光点或“撕裂”瑕疵

WinForms不做这些。如果在WinForms应用程序中渲染到DirectX或OpenGL曲面,则必须翻转视频页面并确保它在正确的时间发生,以避免屏幕撕裂瑕疵

Wpf的默认控件是GPU感知的,可以使用光晕、透明度等定制样式,所有这些都是GPU加速的。WinForms控件并没有从GPU功能中获得显著的好处,因为WinForms(Windows用户控件)用于渲染的唯一功能是2D位图和矩形填充。使用WinForms,发光、透明和动画都是可能的,但您必须完成所有工作
<PerspectiveCamera x:Key="Camera"
 Position="0, 0, 4"
 LookDirection="0, 0, -4"
 UpDirection="0, 1, 0"
 FieldOfView="30"/>