Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 存储设置:XML与SQLite?_C#_.net_Xml_Sqlite_Ado.net - Fatal编程技术网

C# 存储设置:XML与SQLite?

C# 存储设置:XML与SQLite?,c#,.net,xml,sqlite,ado.net,C#,.net,Xml,Sqlite,Ado.net,我目前正在编写一个IRC客户端,我一直在试图找到一种存储服务器设置的好方法。与大多数IRC客户机一样,基本上有一大堆网络及其服务器 我决定使用SQLite,但后来我想让该列表以XML格式(也许是最终格式)在网上免费提供,供其他IRC应用程序使用。所以现在我可以用相同的格式在本地存储设置 我对ADO.NET或XML都没有什么经验,所以我不确定在这种情况下它们会如何比较 一个更容易用编程方式处理吗?快一点吗?这有关系吗?我个人会使用XML进行设置-.NET已经为此构建,因此有许多内置功能,可以将设置

我目前正在编写一个IRC客户端,我一直在试图找到一种存储服务器设置的好方法。与大多数IRC客户机一样,基本上有一大堆网络及其服务器

我决定使用SQLite,但后来我想让该列表以XML格式(也许是最终格式)在网上免费提供,供其他IRC应用程序使用。所以现在我可以用相同的格式在本地存储设置

我对ADO.NET或XML都没有什么经验,所以我不确定在这种情况下它们会如何比较


一个更容易用编程方式处理吗?快一点吗?这有关系吗?

我个人会使用XML进行设置-.NET已经为此构建,因此有许多内置功能,可以将设置存储在XML配置文件中


如果您想使用自定义模式(XML或DB)来存储设置,那么我认为XML或SQLite都可以正常工作,因为您应该在数据存储中使用合适的API。

每个工具都有自己的权利。

我知道,XML有很多炒作。但您应该看到,XML基本上是一种交换格式,而不是一种存储格式(除非您使用本机XML数据库,该数据库提供了更多选项,但也可能会增加一些麻烦)

当您的配置非常小(比如少于10.000条记录)时,您可以使用XML,这样就可以了。您将把整个内容加载到内存中并访问其中的条目。完成了

但是,当您的配置太大,以至于您不想完全加载它时,您会重新考虑您的决定,并继续使用SQLite,它为您提供了动态加载所需配置部分的选项


您还可以提供一个从数据库内容创建XML文件的小工具——从数据库创建XML是一项相当简单的任务。

这是一个比您意识到的更模糊的问题。“设置”可以包含很多东西

有一个很好的.NET基础设施来处理配置文件中的应用程序设置。这些通常作为全局设置对象的属性公开给您的程序;
System.Configuration
命名空间中的类负责读取和持久化它们,Visual Studio中内置了一些工具,可以自动生成用于处理它们的代码。此基础结构支持的数据类型之一是
StringCollection
,因此您可以使用它来存储服务器列表

但对于大量的服务器,这并不是我的第一选择,原因有二。我希望列表中的元素实际上是元组(例如主机名、端口、描述),而不是简单的字符串,在这种情况下,您将不得不格式化和解析数据,以将其放入
StringCollection
,这通常是您应该做其他事情的标志。此外,应用程序设置是只读的(至少在Vista下),虽然您可以给设置用户范围以使其持久化,但这会引导您走上一条在提交之前可能需要了解的道路

所以,我要考虑的另一件事是:您的服务器列表只是一个列表,还是您有一个表示它的内部对象模型?在后一种情况下,我可能会考虑使用XML序列化来存储和检索对象。(我在应用程序配置文件中只保留序列化对象文件的路径。)我这样做是因为将简单对象序列化和反序列化为XML非常容易;您不必关心设计和测试正确的序列化格式,因为这些工具可以为您完成


我考虑使用数据库的主要原因是,如果我的程序执行了一系列操作,这些操作的结果需要是原子的和持久的,或者出于某种原因,我不希望所有的数据同时存储在内存中。如果每次X发生时,我都需要它的永久记录,这将引导我使用数据库。通常,您不希望将XML序列化用于类似的内容,因为如果要将所有对象保存到一个物理文件中,您实际上无法仅序列化一个对象。(虽然简单地序列化整个对象模型以保存一个更改肯定不疯狂。事实上,这正是我公司的产品所做的,它指出了另一种我不会使用数据库的情况:如果数据的模式经常更改。)

看起来这里有两个独立的应用程序:一个web服务器和一个桌面客户端(因为这是传统上运行这些东西的地方),每个应用程序都有自己的存储需求

在服务器端:使用关系数据存储,而不是Xml。基本上,在某些时候,您需要将用户数据与服务器上的其他用户数据分开。XML并不是一个很好的存储


关于客户:这并不重要。Xml可能更易于操作。不要认为因为你在一个环境中使用一种技术,你就必须在另一个环境中使用它

Sqlite有一个.NET包装器这个列表有多大?有多少记录?我指的是在web上提供XML文件供其他人使用。持久性是web和文件的一个问题。将数据存储在数据库中通常更容易,然后——如果需要的话——将结果转换为xml。数据库使持久性变得容易(好的,更容易)。我不确定“原子和持久”是什么意思,你能解释一下吗?它们都是事务的属性。事务是不可分割的,就像原子一样:事务中的所有操作要么都发生,要么都不发生。“持久”意味着一旦事务被提交,它就会以某种形式保存下来,比如说,电力耗尽。(它们也是一致和孤立的:请参阅维基百科条目了解ACID。)