2011-02-07 135 views
0

我几乎没有XML文档与一堆XPath查询。我只想要我设计的应用程序来更改XML文档:)。我有机制来检查文档的完整性并保护某个人的身份。提高XML解析性能

现在,使用C#.Net进行XML解析并不能提供令我满意的性能。

我有的选择是。

  1. 使用新的解析器(即使端口为C++)。
  2. 编写一个模式(可能需要很长时间)。它会提高分析性能吗?
  3. 玩弄更多.Net类或库。 XMLReader是我现在正在使用的

有人能告诉我哪些会在我花费的时间后让我微笑更多。

更新一些信息: 我只想解析和读取一些/所有属性。写作正在改变文件不是我想要的。 稍后可能需要XSD支持。 (Donno什么样的未来对我来说)

当前性能:在1000个文件中14秒内50MB的XML。

打开,文件的关闭也需要一定的时间我想!!(它包括)

我要找1/2的这个时间。

回答

2

你看过Improving XML Performance吗?

没有看到一些代码,这表明你正在做什么和时机,很难对什么是慢发表评论,但我怀疑这是不是解析本身,这是缓慢的。

1

当Microsoft已经定义一个解析器时,不建议您创建一个新的解析器。模式(使用XmlSerializer)的使用极​​大地简化了编码过程。另外,使用sgen(XML Serializer Generator)允许creates an XML serialization assembly for types in a specified assembly in order to improve the startup performance of a XmlSerializer when it serializes or deserializes objects of the specified types

另外,您可以使用xsd.exe工具从xml文件生成模式。生成的模式可以修改以适合您的口味。

更多信息

+0

是否架构提高性能?我没有序列化任何东西。感谢xsd生成器。 XML有近1000个标签和属性。在我生成一个模式之后,它一团糟。我想用[pugixml(http://code.google.com/p/pugixml/)用包装材料 – Vignesh 2011-02-07 08:34:52

+0

@Vignesh,你能后的xml文件的样本?如果将XSD,则流程是:1.使用XSD生成从架构,2.使用XmlSerializer的反序列化XML类定义(加载XML到内存中),3.使用XML元素。 – 2011-02-07 08:46:45

+1

@Vignesh,XPath是查询XML的更快捷方式。但是,如果您事先知道要查询的信息的位置,它只会有帮助。还要注意的是,前代串行器(使用SGEN)的可显著提高应用程序的启动性能(虽然内存消耗保持不变)。 – 2011-02-07 08:48:20

0

首先,我想知道,如果你正确使用术语 “XML解析器”。我问,因为很多人在解析之后(例如使用XSLT)就好像它是解析的一部分一样,不正确地引用它们在XML上的处理。

其次,您从解析器中获得了哪些性能,以及您需要哪些性能?任何改进绩效的练习都应该从这两个数字开始,在我们知道它们有多少不同之前,没有任何建议。

根据模式验证您的源文档通常会增加解析时间而不是减少它。