2011-02-07 183 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上的處理。

其次,您從解析器中獲得了哪些性能,以及您需要哪些性能?任何改進績效的練習都應該從這兩個數字開始,在我們知道它們有多少不同之前,沒有任何建議。

根據模式驗證您的源文檔通常會增加解析時間而不是減少它。