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

标签 c# wpf performance gdi+

我的任务是编写一个 .NET 应用程序来显示包含某些信息(文字或图像)的幻灯片,当用户看到某些项目时,他/她必须立即按空格键,并且按键时间必须是记录。这些项目将一个接一个地显示,大约 50 毫秒。然后我需要评估按键时间戳与幻灯片开始时的时间戳之间的差异(这样我就会知道用户对呈现的项目使用react需要多长时间)。 编辑:我还必须记录特殊元素出现的时间。

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

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

  • 您可能会建议的其他内容

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


最佳答案

我个人喜欢 WPF,但我会非常谨慎地将它用于此应用程序。它不会具有与 GDI+ 或 DirectX 相同的时间精度。有各种各样的东西你必须使用,比如 DispatchTimer,它不是为这样的东西而构建的。 WPF 是图形之上的一整套巨大的抽象,你离金属越远,你就会引入潜在的问题。如果您想将视频投影到组合框内的 3D 球体顶部,那么 WPF 是最佳选择,但如果您需要在您所说的规模上的准确性/精度,WPF 不是答案。我不知道你在哪里读到 WPF 会为你提供更好的准确性,我几乎可以保证它不会。

DirectX 很可能是确保图片一次仅显示 50 毫秒的最准确方法。但 GDI+ 将是一个不错的替代解决方案,因为从编程的角度来看,它可以更轻松地处理文本。

另一个考虑因素是屏幕刷新率。哎呀。如果你计算一下,大多数 LCD 的响应率为 5 毫秒,这是你分配时间的 10%。那而且它们仅以 60Hz 显示。如果每秒显示 20 张图片(每张图片 50 毫秒),它只会在屏幕上显示 3 个刷新周期。

希望对您有所帮助。

关于c# - .NET 桌面应用程序方法的良好实时显示性能和输入处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728653/

相关文章:

c# - 如何获取 DataGridTemplateColumn 中的复选框?

c# - Linq-To-Sql 将字符串转换为具有特定格式的日期

C# IQueryable - 如何查询另一个列表中的列表

c# - MvvmCross:在 ViewModel 中引发事件的最佳方式?

c# - MVVM light Messenger 中的 Action 、局部变量和垃圾收集的奇怪行为

performance - 快速排序分区

c# - Foo() 与 this.Foo()

wpf - 您可以限制 WPF TextBlock 中可见文本的长度吗?

performance - for循环中的计算速度

javascript - HTML5/JS - 启动多个 webworker