我一直在试图找出什么是适当的方式来呈现实时数据作为WPF中的线图。实际上,我实际上是指从USB设备收集的数据,该数据以大约40Hz的速率生成数据。我正在以40Hz的频率以异步方式读取多个(最多7个)数据流。WPF图表/实时数据的可视化
我试过使用两种现成的解决方案(WPF工具包图表和Swordfish图表),几乎查看了动态数据可视化组件,但在阅读其论坛上的一些评论后放弃了它。看起来,现成的图表解决方案适用于静态图表,而且我实际上需要类似于Windows任务管理器的东西 - 只需要更快,更多的数据点。
目前,我已经推出了我自己的解决方案,目前看起来工作效果最好,但我有一种感觉,我错过了一些东西,因为看起来我应该能够从中获得更好的性能。
要求是,它应该能够在滑动窗口中处理大约10000点的恒定范围 - 随着新数据进入(以40Hz),旧数据get被推到可见范围之外的左侧。它需要维持这个速度至少20-30分钟(每个数据流总共约75-100万点)。
我当前的自定义实现是基于从Shape继承的组件,并使用DefinigGeometry的StreamingGeometry。来自设备的数据通过队列传递给组件以提高性能,这是由于固有的“突发效应”,并且在出队操作之后,组件会失效。
所以,我的问题是,我在正确的道路上,还是我完全错了?在WPF中完成这种数据可视化的最有效方法是什么?任何帮助或提示将不胜感激。
DirectX interop是方向。有些人会使用slimDX,但这是一个巨大的依赖性和抽象的学习曲线。我建议直接使用DX9或(通过DXGI的DX11),因为它与WPF D3DImage界面握手。仍然是一个学习曲线,但与slimdx相同,更易于创建DX设备,上下文,缓冲区,着色器并使用Direct3D获取应用程序。文档很糟糕,但足够好,完成后,您已经完成了一些很酷的事情,而不依赖于其他人。使用WPF WinForm MFC EXE查看我们的真实世界[18M制图演示](http://www.gigasoft.com),它主要是音频WAV和GIS数据。 – Robert 2014-06-14 13:58:11
@罗伯特,感谢您的意见。理想情况下,我希望将DX9与w XP兼容,但是我无法弄清楚是否可以用D3D绘制任意粗线,这与我用WPF实现的别名路径质量相当。任何指针?你是否必须编写自己的tesselation程序?如果我能得到我想要的性能/质量明智的话,我甚至会对DX10感到满意。 – 2014-06-14 16:00:36
粗线是D3D最大的缺点。虽然它不是什么大不了的。如果您可以围绕已知的图表大小设计,那么顶点缓冲区逻辑将知道大小及其将线绘制为四边形(双三角形)的简单问题。b)如果您不想基于图形重建顶点缓冲区大小事件,那么着色器应该被设计为在恒定缓冲区中保存长宽比和物理大小设置,然后在顶点着色器中使用这些数据来动态调整行四边形。 dx9/11就是这种情况。或者,您可以使用D2D和数据缩减逻辑来绘制大量数据。 – Robert 2014-06-14 16:23:38