不断更新视图 - 自定义流或事件?

时间:2011-07-13 04:08:20

标签: .net iostream

对新项目进行一些初步研究,我的一个要求是实现3D显示,该显示将呈现一组以20ms - 500ms之间的频率更新的数据。因此,每个(使用下限)20ms的新数据都可以从外部资源(专业硬件)获得,并且这些数据需要提供给3d视图并尽快呈现。为了这个问题,您可以想象每20毫秒气象站采样数据的类比以及将数据推送到消耗服务或对象的要求。 除了这个例子,气象站连接到消费应用程序,因此不需要联网等。

我是一名黑客桌面开发人员,主要是为我自己的制造业务编写应用程序,很少享受学习我认为理所当然的基础技术的奢侈。所以有了这个免责声明让我解释一下我的意思思考:我原本以为我可以只使用一个委托,并在每次准备好新数据集时从硬件组件中触发事件。这很容易,并且〜50个方法调用一秒钟似乎没有太过于滥用! ; 0)

但后来我想,“嘿,也许我应该使用一个流来做这个!”然后很快意识到我不了解Streams足以知道这是不是一个好主意。基于我所阅读的内容以及我使用Streams处理文件,HttpRequests等的经验,似乎将数据从一个子系统以高频率移动到另一个子系统似乎是一个很好的选择。从概念上讲,我想象每次完成获取一组新数据时写入流的硬件组件(与硬件接口的对象),然后我的3D视图将从此流中读取并呈现它。

我有疑问:

  1. 这是基本的,但我不明白从流中读取的代码如何知道何时有新数据需要读取。例如,如果一个新的数据集被写入流中,那么一个单独的线程(当然)“读者”如何知道该数据何时可用?
  2. 我的“MeasurementDataReading”对象的序列化和反序列化是否会消除使用Stream而不是委托方法带来的性能提升?
  3. 我是否完全误解了Streams的意图?我意识到这不是我正在使用的数据的连续“流”,而是在很多小块之间有延迟。

2 个答案:

答案 0 :(得分:3)

我建议在这种情况下反对流(至少直接),因为它听起来像:

  • 您收到的数据会以与您的展示不同的速度刷新...

  • 您正在(接近)实时显示当前正在发生的事情,而不是以显示器刷新速度决定的速度重播之前的事件

作为第一遍,我建议让硬件数据读取过程不断更新单个本地数据模型,并在每次刷新显示时从该模型中读取显示代码。

这种情况与游戏开发者面临的问题相去甚远,所以你可能想要在XNA中悄悄地(甚至实现它)并看到解决这些问题的一些常见方法

答案 1 :(得分:1)

当您需要读取大量数据时,通常会使用Streams,但您不希望将整个块存储在内存中。通信是单向的,呼叫者按顺序请求数据。它们通常不用于将更新从一个实体传递到另一个实体。

我建议在您的实体上使用正在更改并让您的视图订阅该事件的事件。