【问题标题】:Should I use Dictionary instead of XmlDocument?我应该使用字典而不是 XmlDocument 吗?
【发布时间】:2025-12-17 18:25:01
【问题描述】:

我有一个 XML 文件,(asp.net) 应用程序在启动时加载该文件,每个 http 请求通过调用 GetElementById 向其中请求至少 50 个项目。处理它的类是静态的,因此 XmlDocument.Load() 只被调用一次。 XML文件结构非常简单,每个节点只有“ID”标签,节点之间没有层次结构(都在根节点下)。典型节点的格式为:

<txt id="OfficeEmail">bla@bla.com</txt>

我想知道将 XML 内容(约 300 个节点)加载到静态字典是否会提高请求内容时的性能。我可以猜测,一旦加载了 XmlDocument,它就会将节点缓存在一些有效的数据结构中,但是用字典实现它会不会有巨大的开销?

【问题讨论】:

  • @PetervanderHeijden 在调试代码时,似乎大部分时间都花在了按 Id 查找节点的函数上。例如,每个随机执行暂停都会导致该函数。没有进行真正的分析。
  • 每次都会搜索所有节点。尝试看看字典是否能提高性能可能是个好主意。
  • 字典似乎可以提高性能,可能还有多种其他方法可以提高性能但没有看到代码...
  • @Enigmativity 这正是我的问题 - XmlDocument 拥有什么样的数据结构?我认为有某种优化,通过 ID 寻找节点将导致比 O(n) 更有效的复杂性......
  • @Shay___ - XML 文档中的任何元素/属性都没有什么特别之处,因此它不会自动创建用于快速搜索的内部结构。这将是线性的。

标签: c# asp.net performance dictionary xmldocument


【解决方案1】:

300 个节点应该不是问题。但是如果每个请求对 xmldocument 进行 50 次调用,那么您应该测量访问时间。如果它不符合您的要求,您可以这样做:

Dictionary<string, string> values = new Dictionary<string, string>();
// read the xml file on start up populate the dictionary.

// after that, every Dictionary access will be O(1)
string value = values["OfficeEmail"];

【讨论】: