Joa*_*nge 14 .net c# wpf performance winforms
我知道WPF更复杂,更灵活,可以考虑做更多的计算.但是由于渲染是在GPU上完成的,因此对于相同的应用程序(功能和视觉),它不会比Winforms更快吗?
我的意思是当你没有运行任何游戏或重型3D渲染时,GPU并没有做繁重的工作,对吧?而CPU总是很忙.
这是一个有效的假设,还是WPF的GPU利用率在其管道中是一个非常小的操作?
编辑:我感兴趣的应用程序是一个3D建模和动画软件,您可以在其中使用3d视口来导航和编辑场景以及场景中的对象.但我想使用WPF,因为它的现代架构,它从头开始.
EDIT2:同样出于我的目的,由于软件的高端要求,我会将DirectX用于应用程序本身.对于使用低端的人或没有专用GPU的计算机,这没关系,因为他们不在我的主要客户区域.就像其他用于电影和游戏的高端3D软件一样,要求功能强大的计算机从应用程序中充分受益是可以理解的.
Jud*_*ngo 18
如果机器具有GPU,您将在WPF中获得更好的渲染性能.
我们有一个大型桌面应用程序,我们在WinForms中编写,现在移植到WPF.我们目睹了更好的渲染性能,特别是在调整窗口大小或重绘控件时.
我们还发现WPF"控件"比WinForm控件更轻量级.如果我没记错,WPF控件不一定需要操作系统句柄,也不要通过WndProc注册Windows窗口消息,至少不是独立的.
对于您的情况,由于您正在构建一个3D建模应用程序,假设机器上有一些3d硬件,您应该绝对使用WPF而不是WinForms.
对于您描述的应用场景,我希望WPF能够在全功能GPU上大幅超越WinForms进行3D工作.
应用程序类型之间的差异不仅仅是渲染3D矢量管道.WPF的内部架构与WinForms完全不同,WinForms专门用于克服多年以前使用Windows GDI和WinForms应用程序所获得的警告.
(WinForms是一个相对较薄的Windows GDI和User模型包装器,最初是在20世纪80年代后期创建的.Windows用户控件模型在过去25年中不断发展,但核心架构模式基本没有改变.)
例如,WPF始终将UI呈现与应用程序逻辑分开.当WPF窗口进行绘制时,实际渲染发生在后台线程上.在视频回扫间隔期间,刷新的视觉效果会翻转到显示屏,因此您不会在屏幕上获得部分blits或"撕裂"伪影.
WinForms没有这个.如果在WinForms应用程序中渲染到DirectX或OpenGL曲面,则必须完成翻转视频页面并确保在合适的时间发生以避免屏幕撕裂伪像的工作.
Wpf的默认控件具有GPU感知功能,可以通过发光和透明度自定义样式,并且所有GPU都加速了.WinForms控件并没有从GPU功能中获益,因为WinForms(Windows用户控件)用于渲染的唯一内容是2D bitblit和矩形填充.使用WinForms可以实现发光,透明度和动画,但是您必须完成所有工作才能实现它们.
在WPF中,UI灵活性主要是设计和样式化以使WPF为您完成.在WinForms中,你必须自己推动像素.
这是一个非常棘手的问题.
WPF性能的很大一部分是您的GPU.一个好的GPU可以让WPF表现出色.WPF可以非常高效.如果您的要求是拥有一个不错的GPU,因为它是一个3D建模程序,您可能会发现WPF性能与Windows窗体一样好或更好 - 尽管这实际上取决于您使用的是什么.
话虽如此,通常很难比较 - 主要是因为WPF允许您添加许多人们往往甚至从未在Windows窗体中尝试过的视觉效果.许多WPF应用程序"看起来"更快,即使它们在某些情况下由于额外的视觉线索而实际上更慢.
话虽这么说,如果你有很多控件,WPF实际上可以超过Windows窗体相当多.在Windows窗体中,每个控件都需要一个单独的窗口句柄,并接收自己的消息集.通过大量控制,这实际上可以大大降低速度.
这里真正的问题应该是WPF perf.对你的应用来说"足够好".如果您正在进行3D建模应用程序,WPF可能不会成为您的瓶颈 - 应该没问题.
| 归档时间: |
|
| 查看次数: |
9665 次 |
| 最近记录: |