监控项目,16个sensor,采样频率50hz,采用oracle数据库,结构简单:record_time + sensor_data。
Create Table real_data(
record_time timestamp(3),
ac_1 Float,
ac_2 Float,
ac_3 Float,
ac_4 Float,
ac_5 Float,
ac_6 Float,
ac_7 Float,
ac_8 Float,
ac_9 Float,
ac_10 Float,
ac_11 Float,
ac_12 Float,
ac_13 Float,
ac_14 Float,
ac_15 Float,
ac_16 Float
)
Tablespace data_test;
我使用 livecharts wpf 控件读取数据库,显示实时曲线。
要求:20ms显示一个数据,曲线左移,无显示停顿。
现在有两种读取数据库的方法:
定期刷新
Timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(1000) };
问题是1秒的间隔,读取数据库中最新的1秒数据(约50条数据),曲线有停顿(每1秒左移一次);转为20ms刷新,读取最新数据并插入曲线后,多次读取相同数据,因为数据库查询时间在100ms左右(选择top),导致曲线直线很多,不符合实际变化趋势。
- 线程的使用,具体是一个线程读取数据库,选择启动时间,偶尔会有停顿,原因分析:读取数据的时间一般是20ms,偶尔300ms,因为数据库有频繁的insert而删除,同时操作系统内存也是实时变化的,会影响读取速度。而且时间越长,曲线延迟越严重。
是否高频数据显示,通过数据库读取的方式不可行?只通过直接读取设备API可行吗?
谢谢!