c# - 缓存数据记录器数据的方法

标签 c# logging caching sql-server-ce

问候,

我一直在开发一个与数据记录器交互的 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/

相关文章:

c# - 面向对象设计父子关系

linux - 在 Unix 中搜索文件

c - 设计代码以适应 CPU 缓存?

caching - 实现有界上下文时优化数据库查询

java - Tomcat App 不释放缓存

c# - 如何使用 C# 使用 HttpClient 发布 JSON?

c# - 如何从模板重置文本框的属性文本?仅在xaml中

python - 单击复选框时隐藏严重的 pyqt 警告

java - 为新手在应用程序中记录 Facade 或 Logger

c# - 如何嵌套使用newtonsoft.json