C# 在实时仿真中管理数据

C# 在实时仿真中管理数据,c#,multithreading,queue,real-time,C#,Multithreading,Queue,Real Time,我正在为一辆汽车做一个实时仿真项目,并寻求关于C#中处理每个时间段生成的数据的最佳解决方案的建议 基本上,我有一个可以实时计算解决方案的主引擎,可以自己生活。同时,我需要存储以某种方式生成的数据,但没有任何实时要求。在每一个时间步中,我都会生成sqlite命令行,并寻找一种解决方案来并行执行它,而不会降低主机的速度 有什么建议可以用来组合处理此问题的最佳结构吗?我不知道“最佳”是什么,但一个非常好的解决方案是将数据放入队列,并使用一个单独的线程从队列中读取数据并将其持久化 主要优点是收集数据的线

我正在为一辆汽车做一个实时仿真项目,并寻求关于C#中处理每个时间段生成的数据的最佳解决方案的建议

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

有什么建议可以用来组合处理此问题的最佳结构吗?

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

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

保存数据的线程可以独立运行。如果数据库足够快,If可以为每个时间步骤插入数据库。或者,它可以批处理数据并一次发送多条记录以进行批插入

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