Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 管理服务(如IIS)的哪个数据存储_C#_.net - Fatal编程技术网

C# 管理服务(如IIS)的哪个数据存储

C# 管理服务(如IIS)的哪个数据存储,c#,.net,C#,.net,我有一个C#Windows服务,它为我的服务器应用程序管理一些东西。这不是主应用程序,而是用于控制实际应用程序的辅助进程。用户使用WinForms应用程序通过WCF连接到此应用程序。这一切看起来有点像IIS管理器 我需要此应用程序的数据存储。 目前,我使用单独的XML文件,这些文件在启动时加载,在内存中更新,并在每次更改时刷新到磁盘。我喜欢这个,因为: 当出现问题时,我们可以简单地在记事本中编辑XML文件 我与MSSQL express等没有外部依赖关系 当格式更改时,我不必更新数据库模式

我有一个C#Windows服务,它为我的服务器应用程序管理一些东西。这不是主应用程序,而是用于控制实际应用程序的辅助进程。用户使用WinForms应用程序通过WCF连接到此应用程序。这一切看起来有点像IIS管理器

我需要此应用程序的数据存储。

目前,我使用单独的XML文件,这些文件在启动时加载,在内存中更新,并在每次更改时刷新到磁盘。我喜欢这个,因为:

  • 当出现问题时,我们可以简单地在记事本中编辑XML文件
  • 我与MSSQL express等没有外部依赖关系
  • 当格式更改时,我不必更新数据库模式
然而,我发现这是不稳定的,内存管理非常脆弱

我应该用什么来代替,而不是过度使用(如MSSQL express),同时又不会失去上述许多优势?

适用于这样的情况,即您需要一个可靠的数据存储,但不需要完整数据库服务器的强大功能或可扩展性

如果您不想担心模式更改,那么最好使用xml方法或各种NoSQL数据库。您的xml设置到底有什么不稳定的地方

如果有多个并发进程访问xml文件,则必须经常加载它以确保它保持同步。如果这是一种多用户的情况,那么xml文件在非常小的范围内可能是不可行的。这是数据库系统相当有效地解决的问题。

试试看

db4o

一种解决方案是使用对象数据库。它占用的空间非常小,速度非常快,您可以向持久化对象添加属性,而无需更改模式。此外,您不必编写任何sql

存储对象非常简单,如下所示:

using(IObjectContainer db = Db4oEmbedded.OpenFile(YapFileName))
{
   Pilot pilot1 = new Pilot("Michael Schumacher", 100);
   db.Store(pilot1);
}
数据库中的XML

另一种方法是将SQLLite或SQLCE(如其他海报所述)与xml数据结合使用

数据协定序列化程序


如果您还没有使用DataContractSerializer/DataContracts来生成/加载xml文件,那么值得考虑。它与您已经用于WCF的健壮框架相同。它可以很好地处理版本控制。您可以使用它来处理磁盘上的xml文件,或者将其用于数据库。

这其中有哪些部分不稳定?你犯了什么错误?您遇到了什么样的内存管理问题?您的XML文件应该满足您的要求。什么是“不稳定”和“脆弱”呢?我希望改进您的IO,而不是寻找一种新技术。您看过SQL Server Compact吗?在您的情况下,这听起来是个好主意,唯一的缺点是架构更改,但老实说,这种情况发生的频率有多高,更改有多复杂,也许可以先看看EF代码,以便在每次发生更改时更新您的架构(很可能会丢失数据)我在管理不同的文件时遇到了最大的问题。我曾尝试使用一个全局
锁,但这太容易了,而移动到更细粒度的模型会使应用程序的这一部分过于复杂。(我觉得我正在构建一个数据库,这不好。)XML和SQLite的结合是什么意思?我在考虑创建一个数据库结构,可以将XML节点和属性存储为记录。你觉得怎么样?@Pieter-我想的更多是将XML作为一个大字符串放入数据库中。几乎任何嵌入式数据库都支持有点大的文本字段/备注字段等。如果试图将节点和属性拆分为关系结构,则会遇到性能和复杂性问题。性能不是问题,因为数据很少(约30个XML文件,总共600个元素/属性).复杂性,也许吧。对于XML blob,我仍然需要一种方法来索引数据,这意味着我需要一个规范化的架构,我回到了SQLite。还有一些其他选择……NoSQL嵌入式方法如何。ESENT内置在Windows中。RavenDB也可以工作。这个问题有更多的答案:我在管理不同的文件。我尝试过使用一个全局锁,但这太容易了,而且移动到更细粒度的模型会使应用程序的这一部分太复杂。(我觉得我正在构建一个数据库,这不好。)我也在考虑NoSQL,但我希望能为我的情况提供一个建议,即使用.NET本机,而不必安装额外的服务器。我建议查看RavenDB()。我个人没有使用过它,但我知道它相当成熟,并且在.NET中使用起来相当容易