簡體   English   中英

expat解析器:memory消費

[英]expat parser: memory consumption

我正在使用 expat 解析器來解析大約 15 GB 的 XML 文件。 問題是它引發“內存不足”錯誤並且程序中止。

我想知道是否有任何機構面臨與 expat 解析器類似的問題,或者它是一個已知的錯誤並已在以后的版本中得到糾正?

我以前用 expat 來解析大文件,從來沒有遇到過任何問題。 我假設您使用的是 SAX 而不是 expat DOM 包裝器之一。 如果您使用的是 DOM,那么這就是您的問題所在 - 它實際上是試圖將整個文件加載到 memory 中。

您是否在解析 XML 時分配對象並且可能不釋放它們? 那將是我要檢查的第一件事。 檢查問題是否真的與 expat 相關的一種方法 - 如果您將程序簡化為具有空標記處理程序的簡單版本(即它只是解析文件並且對結果不做任何事情),它是否仍然用完 memory?

Expat 有泄漏 - 我已經開始在長期運行的服務器中使用它,並且發現它始終泄漏 memory,無論解析器是否被釋放。 最新版本的 xmlparse.c 不能解決這個問題,只能隱藏現有的泄漏。

我根本不知道外籍人士,但我猜它必須在 memory 中持有太多的 state 出於某種原因。 XML 是否以某種方式形成? 您是否為大塊的結束標簽注冊了處理程序?

我在想,如果您為一個大塊的末尾注冊了一個處理程序,並且預計 expat 將該塊傳遞給該處理程序,那么 expat 在能夠完全收集該塊之前可能會用完 memory。 正如我所說,我不認識外籍人士,所以這可能是不可能的,我只是在問。

或者,您確定外籍人士是 memory 損失的地方嗎? 我可以想象這樣一種情況,您保留有關 XML 文件的內容和您自己的數據結構的一些信息,或者因為數據太大,或者因為 memory 在您的代碼中泄漏,導致了 ZCD69B4956F06CD8291Z8BF3 條件的輸出。

Expat 是一個事件驅動的解析器,它不構造大型內存結構。 因此,問題可能不是 expat(它被廣泛用於解析大文件)——更有可能是您自己的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM