我目前正在编写一个IRC客户端,我一直在试图找出一种存储服务器设置的好方法。基本上是大多数IRC客户端拥有的大型网络及其服务器列表。
我决定使用SQLite,但后来我想让这个列表以XML格式(也许是确定的)在线免费提供,供其他IRC应用程序使用。所以现在我可以以相同的格式在本地存储设置。
我对ADO.NET或XML的经验很少,所以我不确定他们会在这种情况下如何比较。
是否更容易以编程方式工作?一个更快吗?这有关系吗?
答案 0 :(得分:5)
这比你意识到的更加模糊。 “设置”可能包含很多东西。
用于处理配置文件中的应用程序设置有一个很好的.NET基础结构。通常,这些作为全局Settings对象的属性暴露给您的程序; System.Configuration
命名空间中的类负责读取和持久化它们,Visual Studio中内置了一些工具来自动生成处理它们的代码。此基础结构支持的一种数据类型是StringCollection
,因此您可以使用它来存储服务器列表。
但是对于大量服务器,由于几个原因,这不是我的首选。我希望列表中的元素实际上是元组(例如主机名,端口,描述),而不是简单的字符串,在这种情况下,您最终必须格式化并解析数据以将其转换为{{1这通常表明你应该做其他事情。此外,应用程序设置是只读的(至少在Vista下),虽然您可以设置用户范围以使其保持可持续性,但这会导致您在提交之前想要了解的路径。
所以,我要考虑的另一件事是:您的服务器列表只是一个列表,还是有一个内部对象模型代表它?在后一种情况下,我可能会考虑使用XML序列化来存储和检索对象。 (我在应用程序配置文件中唯一保留的是序列化目标文件的路径。)我这样做是因为将简单对象序列化和反序列化为XML非常容易;您不必关心设计和测试正确的序列化格式,因为这些工具适合您。
我看待使用数据库的主要原因是我的程序执行了一系列操作,其结果需要原子和持久,或者如果由于某种原因我不希望我的所有数据同时存在于内存中。如果每次X发生,我想要它的永久记录,这导致我朝着使用数据库的方向。通常,您不希望将XML序列化用于此类事务,因为如果要将所有对象保存到单个物理文件中,则无法实际序列化一个对象。 (虽然简单地序列化整个对象模型以保存一个更改当然并不疯狂。实际上,这正是我公司的产品所做的,它指向另一种我不会使用数据库的情况:如果数据的模式是经常变化。)
答案 1 :(得分:2)
我个人会使用XML进行设置 - 已经构建了.NET来实现这一点,因此有许多内置工具可以将您的设置存储在XML配置文件中。
如果你想使用自定义模式(无论是XML还是数据库)来存储设置,那么我会说XML或SQLite也可以正常工作,因为你应该在数据存储周围使用一个不错的API。 / p>
答案 2 :(得分:2)
每个工具都有自己的权利
我知道有很多关于XML的炒作。但是您应该看到,XML基本上是一种交换格式 - 而不是存储格式(除非您使用本机XML-Database为您提供更多选项 - 但也可能会增加一些麻烦)。
当您的配置相当小(比如少于10.000条记录)时,您可能会使用XML并且没问题。您将把整个内容加载到内存中并访问那里的条目。完成。
但是当您的配置如此之大,以至于您不想完全加载它时,而不是重新考虑您的决定并继续使用SQLite,这使您可以选择动态加载所需配置的那些部分。
您还可以提供一个从DB内容创建XML文件的小工具 - 从DB创建XML是一项相当简单的任务。
答案 3 :(得分:1)
在这里看起来你有两个独立的应用程序:一个Web服务器和一个桌面客户端(因为传统上运行这些东西),每个都有自己的存储需求。
在服务器端:使用关系数据存储,而不是Xml。基本上在某些时候,您需要将用户数据与服务器上的其他用户数据分开。 XML不是一个很好的存储。
在客户端:它并不重要。 Xml可能更容易操作。并且不要认为因为您在一个设置中使用一种技术,所以必须在另一种设置中使用它。