c# - 加载一部分 XML

标签 c# xml loading

我目前正在开发基于移动 C# 的 RPG,进展顺利,但我只是在考虑如何优化数据加载。

目前游戏大约有 20 个左右的单位,每个单位有 50 个不同的级别,每个级别的统计数据都不同。这些统计数据存储在 XML 文档中,按单位分组。所以 Unit1.xml 包含 level1、level 2、level 3….level 50 Unit 的所有统计数据,这些 Unit1 被解析并在第一次在游戏 session 中使用 Unit 1 时将结果缓存到字典中。

我的问题是,这似乎有点矫枉过正,该文档长达数百行,解析所有 50 个级别似乎很疯狂,即使我可能只需要说“Level 5 Unit 1”。显然,我可以对此进行优化的一种方法是将文档拆分为 50 个不同的文档,每个文档包含特定级别的数据,但这似乎也有点疯狂。

有没有人有解决这个问题的好方法?也许可以对文档执行二分搜索以找到特定级别,然后只解析该级别,但我不确定在使用 XML 时这样做有多容易?

最佳答案

您刚刚发现了 XML 在默认情况下是一种非常糟糕的存储格式的另一个原因。问题是您需要阅读您感兴趣的那一行之前的所有内容,因为您必须解析和理解文件的结构。

改进这一点的唯一方法是给自己提示,例如。保存每行开始位置的索引,然后向前跳转。但是,这不再是 XML,让 .NET 读取这些片段可能很棘手。

因此,如果您不能将所有已解析的 XML 保存在内存中,并且您不想分离 XML 文件,也许您可​​以使用一种技巧,将您想要获取的每个实体保存为单独的 XML 文档(带有声明、根元素等),并将它们保存在一个文件中,以及每个文档实际开始位置的索引。

当然,这只有在您自动生成 XML 时才有用。它不再是有效的 XML,这意味着没有其他人可以读取或写入它。

关于c# - 加载一部分 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608476/

相关文章:

java - 更改 SOAP xml 响应中的标记名称(类中的字段和响应中的标记必须不同)

css - 网站部分加载背景图片(Bootstrap)

java - 如何使用 For 循环从数据库中拆分不同 LinearLayout 中的名称

c# - XNA:防止方法返回

c# - ConfigurationManager 和 ConfigurationSettings 之间的区别

c# - 如何使用条件从不同元素获取所有属性

ruby-on-rails - 如何在 Rails 中将哈希数组转换为 XML?

java - 防止类成员转换为 JAXB XML

javascript - 通过 Javascript 加载远程图像,然后有选择地添加到数组

c# - 响应写输出问题