我正在尝试为我的游戏编写一个xml解析器,因为在使用system.xml
命名空间时,最终版本的大小会增加1+ mb。解析器类是一个单例,可以随时在游戏中访问。虽然我要处理的数据量并不多,但我仍然担心性能(因为它是游戏,我不能牺牲任何性能)。
有没有办法有效地处理解析。顺便说一句,我正在使用c#,如果有一个名为<tag>
的标签,我只是将字符串分解成片段,搜索<tag>
和</tag>
。这将以递归方式继续,直到整个字符串完全分解为止。结果将保存在我创建的锯齿状列表类中。
有什么办法,我可以改进我的方法,或者我应该使用System.XML名称空间。
另外需要注意:xml数据来自服务器,而不是来自本地文件。
答案 0 :(得分:5)
一些注意事项(这应该是评论,但是太长了):
System.Xml
的引用,创建了XmlDocument
,使用它并编译,并且没有看到任何有意义的大小增加。System.Xml
是.Net基类库的一部分。通常,您可以指望它在运行.Net的每台计算机上(例如,根据msdn,XmlDocument在XNA中可用,但在便携式类库中没有。)XDocument
,但它也需要System.Xml.dll
,所以没有收获)答案 1 :(得分:2)
我不会这样做。我的意思是。已经存在可靠的工具。不要重新发明轮子。
答案 2 :(得分:2)
您当然可以编写更快的XML解析器,尤其是如果您的功能较少的话。如果它做得少而且不那么健壮,那么它应该更快。不过,我会提醒你注意这一点,因为一旦你的应用程序的一部分声称“支持XML”但只是部分地这样做,那么如果你的XML生产者决定开始添加你的解析器不支持的东西,它将来可能会破坏但任何普通的XML解析器都会。
我之前从另一个方向跑过这个。我们需要增加发送到嵌入式设备的数据,并决定添加一些我们稍后可以阅读的属性。当我们发现设备无法读取我们的数据时,我们感到很惊讶。事实证明,解析器完全是本地的,很难被认为是真正的XML解析器,因为它需要标记在不同的行上,并在添加属性时断开。
如果您使用自己的解析器(可能不会像.NET .NET解析器一样强大),那么您应该谨慎地传达您所做和不支持的内容。