【问题标题】:Manage data in a realtime simulation在实时模拟中管理数据
【发布时间】:2013-12-06 16:29:17
【问题描述】:

我正在为车辆进行实时仿真项目,并正在寻找有关 C# 中处理每个时间步生成的数据的最佳解决方案的建议。

基本上,我有一个可以实时计算解决方案并且可以独立运行的主引擎。同时,我需要存储以某种方式生成的数据——但没有任何实时要求。在每个时间步,我都在生成 sqlite 命令行并寻找一种解决方案来并行执行它而不会减慢主引擎的速度。

有什么建议可以组合出最好的结构来解决这个问题吗?

【问题讨论】:

    标签: c# multithreading queue real-time


    【解决方案1】:

    我不知道“最佳”是什么,但一个非常好的解决方案是将数据放入队列中,并有一个单独的线程从队列中读取数据并将其持久化。

    主要优点是收集数据的线程不会因为等待数据库而陷入困境。它可以将那个时间步的数据排入队列并返回到它正在做的事情(大概是为下一个时间步获取数据)。

    持久化数据的线程可以独立运行。如果数据库足够快,如果可以为每个时间步执行一次数据库插入。或者它可能会批量处理数据并一次发送多条记录以进行批量插入。

    要实现这一切,请创建一个BlockingCollection(共享队列),收集线程写入其中,持久线程从中读取。 BlockingCollection 处理多个生产者和多个消费者,而无需您进行显式锁定或类似的操作。它真的很容易使用,而且性能很好。它使这种事情实现起来非常快。

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 2023-03-14
      • 2014-12-25
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2020-08-24
      相关资源
      最近更新 更多