我目前正在编写一个IRC客户端,我一直在试图找出一种存储服务器设置的好方法.基本上是大多数IRC客户端拥有的大型网络及其服务器列表.
我已经决定使用SQLite,但后来我希望以XML格式(也许是权威的)在线免费提供列表,供其他IRC应用程序使用.所以现在我可以以相同的格式在本地存储设置.
我对ADO.NET或XML的经验很少,所以我不确定在这种情况下他们会如何比较.
是否更容易以编程方式工作?一个更快吗?有关系吗?
这是一个比你意识到的更模糊的问题."设置"可以包含很多东西.
有一个很好的.NET基础架构来处理配置文件中的应用程序设置.通常,这些作为全局Settings对象的属性暴露给您的程序; System.Configuration
命名空间中的类负责读取和持久化它们,Visual Studio中内置了一些工具来自动生成处理它们的代码.此基础结构支持的数据类型之一是StringCollection
,您可以使用它来存储服务器列表.
但是对于大量的服务器列表,由于几个原因,这不是我的首选.我希望列表中的元素实际上是元组(例如主机名,端口,描述),而不是简单的字符串,在这种情况下,您最终必须格式化并解析数据以使其进入a StringCollection
,并且通常表明你应该做其他事情.此外,应用程序设置是只读的(至少在Vista下),虽然您可以设置用户范围以使其保持可持续性,但这会导致您在执行之前想要了解的路径.
所以,我要考虑的另一件事是:您的服务器列表只是一个列表,还是有一个内部对象模型代表它?在后一种情况下,我可能会考虑使用XML序列化来存储和检索对象.(我在应用程序配置文件中唯一保留的是序列化目标文件的路径.)我这样做是因为将简单对象序列化和反序列化为XML非常容易; 您不必担心设计和测试正确的序列化格式,因为工具会为您完成.
我使用数据库的主要原因是,如果我的程序执行一系列操作,其结果需要是原子的和持久的,或者如果由于某种原因我不希望我的所有数据同时存在于内存中.如果每次X发生,我想要它的永久记录,这导致我朝着使用数据库的方向.通常,您不希望将XML序列化用于此类事务,因为如果要将所有对象保存到单个物理文件中,则无法实际序列化一个对象.(虽然简单地序列化整个对象模型以保存一个更改当然并不疯狂.事实上,这正是我公司的产品所做的,它指向另一种我不会使用数据库的情况:如果数据的模式是经常变化.)