良好的实时显示性能和.NET桌面应用程序方法的输入处理

时间:2012-12-05 17:12:24

标签: c# wpf performance gdi+

我的任务是编写一个.NET应用程序,显示带有一些信息(文字或图像)的幻灯片,当用户看到某些项目时,他/她必须立即按空格键,按键的时间必须是记录。这些物品将一个接一个地显示,持续约50ms。然后我需要评估按键的时间戳和幻灯片开始时的时间戳之间的差异(所以我将知道用户对所呈现的项目做出多长时间的反应)。 编辑:我还必须记录特殊项目出现的时间。

我需要减少应用程序运行时可能出现的任何不可预测的滞后,以便输入处理尽可能真实,并减少幻灯片之间的任何滞后。目前我正在考虑3种方法:

  • 编写标准Windows窗体(GDI +)应用程序。
  • 编写WPF应用程序
  • 编写一个支持DirectX的Windows窗体应用程序,该应用程序使用Tom Miller's Render loop概念(在性能方面被称赞为有效)。

  • 您可能建议的其他内容

我必须澄清,我不会使用先进的显示技术,特效或专为3D环境设计 - 只是使用不同字体和颜色的纯文本幻灯片,或图像。不幸的是我不能引用我的消息来源,但我已经读过Windows Forms和GDI +无法为我提供所需的准确性。那么,WPF会为我提供更好的解决方案吗?我是否需要使用渲染循环或其他方法。我对桌面应用程序的此类性能要求没有经验,所有建议都将受到重视。


2 个答案:

答案 0 :(得分:4)

我个人喜欢WPF,但我会非常谨慎地将它用于此应用程序。它不会像GDI +或DirectX那样具有相同的时间精度。像DispatchTimer一样,你将需要使用各种各样的东西,它只是不是为这样的东西构建的。 WPF是一组基于图形的巨大抽象,你越远离金属,你就会引入潜在的问题。如果你想将一个投影在3D球体顶部的视频放在一个组合框中,那么WPF就是你要走的路,但是如果你需要准确/精确的话,WPF就不是答案了。我不知道你在哪里读到WPF将为你提供更好的准确性,我几乎可以保证它不会。

DirectX最有可能确保图片一次只显示50毫秒。但是GDI +将是一个不错的替代解决方案,因为它可以更容易地从编程角度处理文本。

另一个考虑因素,屏幕刷新率。让人惊讶。如果你算一算,大多数液晶显示器的响应速率为5毫秒,这是你指定时间的10%。那和他们只显示在60Hz。如果您每秒显示20张图片(每张图片50毫秒),则只会在屏幕上显示3个刷新周期。

我希望这会有所帮助。

答案 1 :(得分:0)

50毫秒不长。也许编码并播放幻灯片作为视频?