C# MFC中的硬件加速

C# MFC中的硬件加速,c#,c++,wpf,mfc,hardware-acceleration,C#,C++,Wpf,Mfc,Hardware Acceleration,我目前正在开发一个软件,该软件涉及以图形和图表形式实时呈现性能指标。我需要尽可能快地获取数据、处理数据和渲染图像。我的后端是C++,我必须在前端做一个选择。 考虑到我的后端是C++,我倾向于使用MFC。另一种选择是用WPF C++来实现前端,并用我的C++后端进行互操作。我最近读到WPF提供了硬件加速,这将帮助我实现高帧速率。MFC硬件也会加速其图形吗?硬件加速重要吗? 考虑到WPF的硬件加速,在我的例子中,这是否使WPF成为最有效的图形替代方案 我相信WPF使用DirectX 9提供了硬件加速

我目前正在开发一个软件,该软件涉及以图形和图表形式实时呈现性能指标。我需要尽可能快地获取数据、处理数据和渲染图像。我的后端是C++,我必须在前端做一个选择。 考虑到我的后端是C++,我倾向于使用MFC。另一种选择是用WPF C++来实现前端,并用我的C++后端进行互操作。我最近读到WPF提供了硬件加速,这将帮助我实现高帧速率。MFC硬件也会加速其图形吗?硬件加速重要吗?
考虑到WPF的硬件加速,在我的例子中,这是否使WPF成为最有效的图形替代方案

我相信WPF使用DirectX 9提供了硬件加速。然而,对于线形图,限制因素是界面元素的数量。我们正在WPF中创建一个程序,使用Telerik图表实时显示表面肌电数据。这些可以配置为在引擎盖下使用direct2d加速,如果您有很多数据点,可以稍微提高性能。它仍然是不稳定的,因为您无法控制WPF的渲染线程


这在某种程度上取决于图形中所需的功能数量。如果优先考虑的是丝般平滑的实时显示,则不要使用WPF。

Visual Studio 2010向MFC添加了类,以支持使用MFC程序中的Direct2D渲染

要使用Direct2D,首先要在视图的
OnCreate
中调用
EnableD2DSupport()
(从技术上讲,我认为它不必位于
OnCreate
,但这是通常的位置)。然后,当D2D显示上下文需要更新时,您将收到
AFX\u WM\u DRAW2D
消息,因此您通常需要为此添加一个处理程序,并根据需要呈现您的内容来响应它

另一个可能考虑的是使用现有控件绘制图表。有相当多的,包括一些免费的相当自由的许可证。举个例子,CodeProject有很多,其中一些使用D2D绘制,还有很多不使用D2D


老实说,我会有点惊讶于图表的信息更新速度足以让绘图速度产生巨大的变化。在大多数典型情况下,真正的限制将是用户理解您正在绘制的内容的能力。一个用户根本无法看到100个不同的图形在(比如)60赫兹的频率下被更新,并且很有希望从它们中获得更多的真实意义。在大多数情况下,真正的挑战不是更快地绘制更多的数据,而是为用户提供更好的方法,让他们专注于一次可以完成的几件事情,并且(例如)在需要时提请他们注意重要的更改。

有什么特别的原因不应该使用OpenGL/DirectX进行gpu加速的光栅化吗?如果我使用WPF,它是否内部化了基于OpenGL/DirectX的渲染?有了MFC,我需要自己做。我不知道这会有多困难,我建议选择XNA。它提供了便于视频游戏开发的托管运行时环境。如果我使用WPF,它会比MFC更快吗?我没有MFC的任何经验。