在.Net中,本地状态持久性有哪些选项?

4

我正在寻找一些用于持久化应用程序本地状态的好方法(.Net / C#创建)。

我考虑自己开发解决方案,或使用简单的本地数据库,例如Sqllite,然而我想问问SO社区还有哪些可用的选项。

我正在为一个在Kiosk上运行的应用程序工作,并且需要在意外关机和其他类似异常情况下维护本地状态。

你有什么推荐的吗?

更新

经过进一步审查,我决定使用带有DbLinq的SQLite,主要替代品是SQL Server Compact edition,但我发现了几个重要因素,这些因素使得SQLite优于SQLCE。

特别是:

  • SQLCE提供的API(据我所见)不如SQLite.net或DbLinq提供的API丰富。
  • SQLCE运行时性能不如SQLite。
  • SQLite是开源的,这是一个有用的因素。

为什么我没有使用Properties.Settings或app.config?

对于我的用例,我需要类似于(易于)查询事件日志的东西(我需要允许信用交易的审核)。我在这里处理的主要状态值是Kiosk上的可用信用。因此,在应用程序启动时恢复我的状态变量,我可以查询日志获取最后一个条目,并从那里获取所需的值。

当您只需要存储值并检索它时,Properties.Settings或app.config是完全足够的地方。


1
SQLite绝对是一个不错的选择,它比完整的数据库更轻便,并且在出现严重问题时它是ACID兼容的。这里唯一的要求是您需要为数据库拥有一个并发用户。 - Ryan Stecker
@VoiDeD - 你可以把这个变成答案吗? - ocodo
5个回答

4
我建议使用XmlSerializerBinaryFormatter,你可以在SO或谷歌上查找它们。
你的选择将取决于一些偏好,例如数据集的大小或能够快速序列化它。
如果你需要整个应用程序状态一次性保存,这两种方法都非常快速。
然而,如果你需要根据发生的更改逐步保存应用程序状态的部分,最好使用某种数据库,例如http://www.sqlite.org/http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm http://www.jpreece.com/csharp/serialization-tutorial/

谢谢,这是一个值得记住的好选择。对于我的特定用例,我需要更细粒度/可记录的东西,所以SQLLite可能是最好的选择。 - ocodo
这就是我扩展回答的原因。在一个项目中,我使用BinaryFormatter编写了整个数据库和日志记录,我有程序状态的定期快照,并从中编写差异... - Daniel Mošmondor
很有趣,我可能会在我的特定情况下使用SQLite,但这对其他情况肯定很有用。谢谢。 - ocodo

3

SQLite绝对是一个很好的选择,它比完整数据库更轻便,并且在出现问题时符合ACID标准。

这里唯一的要求是您只能有一个并发用户访问该数据库。


ACID兼容性是SQLlite相对于使用Properties.Settings最有用的特性。 - ocodo

1

你能使用 app.config 或者 Properties.Settings 吗?


请看我对Priyank的回复。感谢你的建议。 - ocodo

1

从语义角度来看,使用设置让我感到困扰。应用程序(及其组成部分)的运行时状态并不真正属于“设置”,尽管我可以理解其中的方便之处。例如,可能有现金插入了自助服务机,如果发生停电事件,我需要能够让上一个用户取回现金。 - ocodo

0

你可以使用SQL Server CE 4.0代替SQLite。将数据存储在一个文件中,然后你可以使用Entity Framework Code-First。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接