2008-10-02 33 views
0

我有一個讀取XML文件的進程。它使用XMLTextReader類來執行此操作,因爲它應該是一個快速的,僅向前的XML解析器/閱讀器。.NET 1.1中的XMLTextReader

在1兆字節的測試文件中工作得很好,但在實時系統中處理12兆文件時完全停止。

除了編寫我自己的XML閱讀器之外,是否還有其他解決方案?這不是世界末日,但我寧願儘可能使用可用的標準組件

回答

0

過去我有類似的性能問題。我將其追溯到試圖遠程解決DTD /模式。你在做這個嗎?如果可能,嘗試將XmlTextReader.XmlResolver設置爲null。

+0

謝謝,但XMLResolver屬性未在此實例中設置 – user6690 2008-10-02 13:21:06

1

SAXExpat曾經是非常好的。 Expat是 XML解析器,幾乎是一個參考實現。我記得使用它來讀取通過TCP連接發送的一些同步XML文件,有時甚至是大文件(大約50mb),沒有任何問題。那是3/4年前的.NET 1.1和非常糟糕的電腦。

0

取決於你從讀者中得到什麼。你是否把它放在一個XML DOM或者任何對象模型中?這會讓你記憶力大打,不管你使用什麼語言或圖書館。

也許它在1.1中存在缺陷,想過試試2.0?我從未在1.1天內使用XmlTextReader,所以我不能擔保:但從2.0開始,它是完美的。

+0

嗨 - 數據被髮布到SQLServer 2000數據庫。該進程在具有大量內存的四處理器服務器上運行。我無法更改我在此項目上使用的Framework版本,因爲它是現在寫回的現有應用程序的一部分。 – user6690 2008-10-02 13:28:10

1

如果問題出現在XmlTextReader中,我會非常驚訝。

如果您花了幾分鐘時間編寫一個創建XmlTextReader的測試程序,並簡單地使用Read()讀取文件中的每個節點,直到它到達文檔末尾,我打賭您會發現它通過你的12mb文件像熱刀通過黃油放大。如果遇到這個問題,這是我第一次嘗試。

因爲一旦你消除了XmlTextReader作爲問題的根源,你可以把注意力集中在實際導致它的東西上 - 這很可能是處理你正在閱讀的節點的代碼,而不是代碼讀取節點。

0

只有一個想法。你是否在整個過程中打開一個數據庫事務?如果是這樣的話,在沒有交易的情況下嘗試,或者至少在交易過程中提交。

0

我討厭推薦這款軟件,但是如果軟件沒有售出或者是外部的,你可以試試從Mono引進讀者,看看是否能解決你的問題。