我正在Visual Studio中开发一个PC应用程序,我正在显示通过WiFi连接的数百个传感器的状态。问题是我需要在关闭应用程序后保持传感器数据,所以我正在考虑某种形式的永久存储。这些是我考虑过的选项:
1)我的传感器对象相对紧凑,只有少数属性。我可以在关闭应用程序之前序列化所有对象,并在每次应用程序重新启动时加载它们。
2)我可以将所有属性(主要是字符串和双精度)放入一个简单的文本文件中,并创建一个自定义协议进行存储和检索。
3)我可以将数据库与我的应用程序集成。有人告诉我这是最好的方法,但我有点犹豫,因为我不熟悉数据库。
哪种方法在资源使用和速度方面会产生最佳效果?或者还有其他一些更好的方法吗?
答案 0 :(得分:1)
你需要的第一件事就是了解你的问题。例如,当程序运行时,您是否需要同时将所有内容放在内存中,或者您是否一次使用一个传感器?
什么是“大量数据”?例如,对我来说永远不会少于百万(或在某些情况下为十亿)。
一旦你知道你不应该因为你不熟悉而害怕使用某些东西。否则你不是在为你的问题找到最好的解决方案,你只是以一种你觉得舒服的方式来解决它。
这就是说,你有几种方法可以做到这一点。就像你说的那样你可以序列化数据,使用json存储和其他一些替代方案,但如果我们谈论的是“我们想要持久存储的大量数据”,我总是会要求使用数据库(这个名字说了很多) )。如果你不需要同时拥有内存中的所有内容那么我相信这是你最好的选择。
我个人不喜欢它们(再次,个人选择)但是在你仍然使用你的对象的同时不学习SQL(很多)的一种方法是使用像NHibernate这样的ORM(你还需要学习如何使用这样你就不会让事情变慢。
如果您需要同时加载所有内容(通常情况并非如此,请确保这一点),您需要知道要保留的内容并将其序列化。如果您希望其他工具可以读取数据或以给定方式组织数据,请考虑XML或JSON等数据格式。
答案 1 :(得分:0)
另外,您可以使用mmap-file。 文件是永久性的,并在程序运行之间保留数据。 因此,您只需将数据结构保留在mmap-ed区域中,而不再是。
MSDN手册: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366556%28v=vs.85%29.aspx
答案 2 :(得分:0)
由于您需要在程序开始时加载一次所有数据,因此数据库案例似乎令人怀疑。当您需要多次加载一些数据时,数据库是必需的。
所以前两个案例似乎更受欢迎。我建议隐藏一个接口后面的特定解决方案,然后你可以稍后更改它。
传感器阵列的标准.NET序列化可能更简单,并且更容易扩展。