问候,
我一直在开发一个与数据记录器交互的 C#.NET 应用程序。用户可以查询并获取指定时间段内的日志,并查看数据的图表。通常,每分钟都会创建一个新的数据日志,并存储一些参数的测量结果。为了从记录器中获取有意义的信息,需要获取合理数量的日志 - 至少几天的数据。硬件接口(interface)是设备上的 UART 至 USB 模块,它将传输限制为最大约 30 个日志/秒。当读取几天/几周内获取的数据时,这会变得非常慢。
我想做的是提高用户的感知性能。我意识到,由于硬件速度限制,用户至少在第一次获取更大的数据集时必须等待完整的下载周期。我的目标是缓存应用程序看到的所有数据,以便在再次请求时可以更快地获取数据。我一直在考虑的方法是使用轻型数据库,例如 SqlServerCe,它可以在收到数据日志时存储它们。然后我希望在查询设备的日志之前首先搜索缓存。缓存将使用请求获取的尚未缓存的任何日志进行更新。
最后我的问题 - 您认为这是一个好方法吗?您能想到更好的替代方案吗?我尝试在 SO 和 Google 上搜索以强化这个想法,但我主要遇到的是有关网络请求/内容缓存的讨论。
感谢您的反馈!
最佳答案
看起来是一个非常合理的方法。就我个人而言,我会使用 SQL CE 进行存储,确保对保存记录日期时间的列建立索引,然后在索引上使用 TableDirect 来获取和插入数据,这样速度会非常快。由于您的数据已经按时间顺序排列,因此无需涉及任何缓慢的 SQL 查询处理器,只需查找日期(或结束时间)并使用 SqlCeResultSet 前滚即可。您最终的速度将仅受 I/O 限制。我分析了在一个项目中所做的非常非常相似的事情,发现使用 SQLCE 的 TableDirect 与平面二进制文件一样快。
关于c# - 缓存数据记录器数据的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878128/