存储设置:XML 与 SQLite?

2024-04-03

我目前正在编写一个 IRC 客户端,并且一直在尝试找出一种存储服务器设置的好方法。基本上是一个大的网络列表及其服务器,就像大多数 IRC 客户端一样。

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

我对 ADO.NET 或 XML 的经验很少,所以我不确定它们在这种情况下会如何比较。

以编程方式使用是否更容易?有一个更快吗?有关系吗?


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储设置:XML 与 SQLite? 的相关文章

  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • XSD 嵌套元素

  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 查找与布尔查询匹配的大型 int 数组子集的算法

    假设我有一个 M 32 位整数的大数组 其中每个值的设置不超过 N 位 现在我想返回与查询 Target AND Value Target 匹配的子集 即目标位出现在数组值中设置的值 暴力破解很简单 只需迭代数组并提取其中 target v
  • Unison:仅在一个方向上同步

    如果我有文件夹 A 和 B 是否可以将新文件从 A 同步到 B 并且不删除 B 中的文件而删除 A 中的文件 也就是说 我想用B作为任何文件的大容器 包括我曾经从A同步然后删除的文件 我认为这被认为是一种 单向同步 我了解您对 Unison
  • 在 eclipse 中使用 java.io 库,以便 FileInputStream 可以读取 dat 文件

    Goal Print the data from a dat file to the console using Eclipse 长期目标 我可以将 dat 文件传递 给可执行文件 它会创建一个带有格式化数据的新 txt 文件 The da
  • jQuery Dragenter 或 Dragover 包含子项

    我目前正在编写一个上传脚本 当然它具有拖放功能 However当我将文件拖到我的元素上时 我试图让它工作 它添加了类拖累然而 因为我的元素有孩子 所以它会不断地触发 因为它进入和离开元素 我想知道什么我怎样才能扩展 dragenter dr
  • 在 Visual Studio 中查看 var 的类型

    有没有办法查看 a 的类型var在 Visual Studio 2013 代码编辑器中 当我有一个疯狂的时候linq查询 很高兴看到结果类型是什么 我不想更换var关键字与实际类型 我只想看看它是什么 还有一个键盘快捷键会向您显示 将光标放
  • Java GUI repaint() 问题?

    我有一个 JFrame 该 JFrame 包含一个 JButton 我单击 JButton 然后创建了 10 个 JTextField 问题 在通过调整窗口大小 强制重新绘制 之前我看不到它们 只有这样我才能看到创建的 JTextField
  • 安装补丁 19 后,Oracle Forms 6i 在启动时崩溃并显示 0xC0000005 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPD 0xC0000005 是STATUS ACCESS VIOLATION 在 winnt h 中定义 这意味着应用程序尝试访问它无法
  • Python super 和设置父类属性

    我在 Python super 以及继承和属性方面遇到了一个非常奇怪的问题 首先 代码 usr bin env python3 import pyglet import pygame class Sprite pyglet sprite S
  • 找到字符串中最长的子串

    我想找到字符串中最长的重复字符序列 ex aabbccc gt ccc aabbbddccdddd gt dddd etc 在第一个示例中 ccc 是最长的序列 因为 c 重复了 3 次 在第二个示例中 dddd 是最长的序列 因为 d 重
  • 如何返回许多 Promise 并在执行其他操作之前等待所有 Promise

    我有一个循环 它调用一个异步执行操作的方法 这个循环可以多次调用该方法 在这个循环之后 我有另一个循环 仅当所有异步工作完成时才需要执行 所以这说明了我想要的 for i 0 i lt 5 i doSomeAsyncStuff for i
  • 使用函数计算 C# 中数组之间的欧几里德距离

    我想计算用户输入的点之间的欧几里德距离 如下所示 static void Main string args int numtest int Parse Console ReadLine int points new int 10 2 for
  • Angular 2 - 打开/关闭默认引导模式

    我不想使用Angular2 引导程序 https github com shlomiassaf angular2 modal or ng2 bs3 模态 https github com dougludlow ng2 bs3 modal正如
  • 获取 Autofac 中接口的所有已注册实现

    我需要从IComponentContext 已注册的列表Type是实现特定接口的 我不需要类型的实际实例 而是想要一个列表Type其中我could获取实例 我想使用此列表在消息总线上生成订阅 如何在 Autofac 中获取接口的所有已注册实
  • 单击按钮获取数据表行数据

    我有一个问题this https plnkr co edit cr4VDR1AZih8WiNxmKg6 p preview项目 我正在尝试创建一个 CRUD 菜单 当点击 编辑 按钮时 该行的数据将被传输到引导模式 并且用户可以从那里进行编
  • 如何访问 PHP 中多选下拉列表中选择的值?

    我在用Jquery 多选小部件 http www erichynds com jquery jquery ui multiselect widget 有一个带有多选选项的下拉列表框 我正在使用 MySql 数据库中的数据填充下拉列表 我无法
  • Google 身份服务 - 如何从经过身份验证的用户获取个人资料/电子邮件信息

    我正在移植一些现有的 js 代码 通过谷歌云平台进行身份验证 因为它们正在迁移到一组新的库 迁移指南 https developers google com identity oauth2 web guides migration to g
  • Cloud SQL 增量到 BigQuery

    我需要针对我正在研究的用例之一提供一些建议 使用案例 我们在 Cloud SQL 中拥有大约 5 10 个表的数据 其中一些被视为查找表 另一些则被视为事务性表 我们需要将其发送到 BigQuery 以生成 3 4 个表 扁平化 嵌套或非规
  • 如何在 JSONP 中处理 twitter 失败鲸鱼

    I load http search twitter com search json callback formatTweets q somehashTag timestamp new Date getTime 我突然得到 Error il
  • FFMPEG 将视频叠加在另一个视频之上

    我已经浏览了 stackoverflow 上的所有问题 但没有一个答案对我有用 我有一个屏幕录制的 mp4 视频和另一个从网络摄像头录制的 mp4 视频 我想将网络摄像头视频覆盖在屏幕录制视频的左上角 我想我终于找到了执行此操作的正确命令行
  • 存储设置:XML 与 SQLite?

    我目前正在编写一个 IRC 客户端 并且一直在尝试找出一种存储服务器设置的好方法 基本上是一个大的网络列表及其服务器 就像大多数 IRC 客户端一样 我决定使用 SQLite 但后来我想以 XML 格式 也许是最终格式 在线免费提供该列表