我知道WPF更复杂,更灵活,所以可以考虑做更多的计算。但是因为渲染是在GPU上完成的,所以对于相同的应用程序,它不是比Winforms更快(在功能和视觉上)吗?
我的意思是,当你没有运行任何游戏或繁重的3d渲染时,GPU不会做繁重的工作,对吧?而CPU总是很忙。
这是一个有效的假设,还是GPU对WPF的利用在其管道中只是一个非常小的操作?
编辑:我感兴趣的应用程序是一个3d建模和动画软件,您可以使用3d视口来导航和编辑场景以及场景中的对象。但我想使用WPF,因为它的架构很现代,而且是从头开始的。
EDIT2:出于我的目的,我将使用DirectX作为应用程序本身,因为该软件的高端需求。至于使用低端或没有专用GPU的计算机的人,这是可以的,因为他们不在我的主要客户区域。就像其他用于电影和游戏的高端3d软件一样,需要一台功能强大的计算机才能充分受益于该应用程序,这是可以理解的。
发布于 2010-03-27 02:23:51
如果机器有GPU,你将在WPF中获得更好的渲染性能。
我们有一个用WinForms编写的大型桌面应用程序,现在正在移植到WPF。我们已经看到了更好的渲染性能,特别是在调整窗口大小或重新绘制控件时。
我们还发现WPF“控件”比WinForm控件更轻量级。如果我没记错的话,WPF控件不一定需要操作系统句柄,也不需要通过WndProc注册窗口消息,至少不是独立注册。
对于您的情况,由于您正在构建一个3d建模应用程序,这类应用程序假设机器上安装了一些3d硬件,因此您绝对应该在WinForms上使用WPF。
发布于 2010-03-27 02:46:54
对于你描述的应用场景,我预计WPF在全功能图形处理器上的3D工作表现将远远超过WinForms。
应用程序类型之间的区别不仅仅是3D矢量管道的渲染。WPF的内部架构与WinForms完全不同,专门设计用来克服从Windows GDI和WinForms应用程序多年经验中学到的警告。
(WinForms是最初创建于20世纪80年代末的Windows GDI和用户模型的相对较薄的包装器。Windows用户控制模型在过去的25年中发生了变化,但核心体系结构模式在很大程度上没有变化。)
例如,WPF始终将UI呈现与应用程序逻辑分开。当WPF窗口去绘制一些东西时,实际的渲染发生在一个后台线程上。在视频回溯间隔期间,刷新的视觉效果会翻转到显示器上,因此屏幕上不会出现部分blits或“撕裂”伪影。
WinForms不会做这些事情。如果在WinForms应用程序中渲染到DirectX或OpenGL表面,则必须翻转视频页面并确保在正确的时间进行,以避免屏幕撕裂伪影。
Wpf的默认控件是GPU感知的,可以自定义样式与发光和透明度等,而不是所有GPU加速。WinForms控件不会从图形处理器功能中获得明显的好处,因为WinForms (Windows用户控件)用于渲染的只有2D位块和矩形填充。发光、透明、动画都可以用WinForms实现,但你必须完成所有的工作才能实现它们。
在WPF中,UI的圆滑主要是一个设计和样式的问题,让WPF为你做它。在WinForms中,您必须自己推动像素。
发布于 2010-03-27 02:26:47
这是一个很难回答的问题。
WPF性能的很大一部分是您的GPU。一个好的GPU能创造奇迹,让WPF表现出色。WPF的性能非常好。如果您的要求是有一个像样的GPU,因为它是一个3D建模程序,您可能会发现WPF的性能与Windows Forms一样好,甚至更好-尽管这实际上取决于您使用的是什么。
也就是说,它通常很难比较-主要是因为WPF允许您添加许多人们甚至从未在Windows窗体中尝试过的视觉效果。许多WPF应用程序“看起来”更快,尽管在某些情况下,由于额外的视觉线索,它们实际上更慢。
也就是说,如果您有很多控件,WPF实际上可以在一定程度上超越Windows窗体。在Windows窗体中,每个控件都需要一个单独的窗口句柄,并接收其自己的消息集。有了很多控件,这实际上可以显著地减慢速度。
这里真正的问题应该是WPF性能。对你的应用程序来说“足够好”。如果你正在做一个3D建模应用程序,WPF很可能不会成为你的瓶颈--它应该没问题。
https://stackoverflow.com/questions/2525654
复制相似问题