我有一个C#Windows服务,它为我的服务器应用程序管理一些东西。这不是主应用程序,而是用于控制我的实际应用程序的辅助进程。用户使用WinForms应用程序通过WCF连接到此应用程序。这看起来有点像IIS管理器。
我需要这个应用程序的数据存储。
目前,我使用单独的XML文件,这些文件在启动时加载,在内存中更新并在每次更改时刷新到磁盘。我喜欢这个因为:
但是,我发现这不稳定,并且内存管理非常脆弱。
我应该使用什么而不是过度杀戮(例如MSSQL express),而不会失去太多上述优势?
答案 0 :(得分:1)
SQLite适用于需要可靠数据存储的情况,但不需要完整数据库服务器的强大功能或可扩展性。
如果您不想担心架构更改,最好使用xml方法或各种NoSQL数据库。你的xml设置究竟有什么不稳定的地方?
如果有多个并发进程访问xml文件,则必须经常加载它以确保它保持同步。如果这是多用户情况,则xml文件可能在非常小的范围内不可行。这是数据库系统相当有效地解决的问题。
答案 1 :(得分:1)
答案 2 :(得分:0)
<强> db4o的强>
一种解决方案是使用和对象数据库,如dB4o。它占地面积极小,速度快,可以为持久化对象添加属性,而无需进行架构更改。此外,您不必编写任何sql。
存储对象非常简单:
using(IObjectContainer db = Db4oEmbedded.OpenFile(YapFileName))
{
Pilot pilot1 = new Pilot("Michael Schumacher", 100);
db.Store(pilot1);
}
数据库中的XML
另一种方法是使用SQLLite或SQL CE(如其他海报所述)和xml数据。
数据合约序列化程序
如果您尚未使用DataContractSerializer / DataContracts生成/加载xml文件,则值得考虑。它与您已经用于WCF的强大框架相同。它很好地处理版本控制。您可以使用它来处理磁盘上的xml文件,或将其与数据库一起使用。