我覺得這是一個很好的問題並沒有提供太多的信息,所以我會盡量回答我自己更換所有聲明。
下面是關於如何使用撒克遜一個例子:丟棄文檔:
declare function local:doStuffInDocument($doc as document-node()) {
$doc//testPath
};
let $urls := ("http://url1", "http://url2")
let $results :=
for $url in $urls
let $doc := saxon:discard-document(doc($url))
return local:doStuffInDocument($doc)
return $results
通過使用類似的代碼我設法從4 + GB減少內存消耗僅300MB。
要了解丟棄文檔呢,這裏是從邁克爾·凱極大評論發現在SF maillist:
只是爲了解釋什麼丟棄文檔()的作用:
撒克遜維持(由變壓器/控制器擁有)表 將文檔URI映射到文檔節點。當您調用文檔() 函數時,Saxon會查看該表是否在該表中,並且如果它是 ,它將返回相應的文檔節點。如果不是,則它讀取 並分析在該URI處找到的資源。 saxon:discard-document()的效果是刪除 這個映射表中的文檔條目。 (當然,如果從這個 表中引用一個文檔,那麼垃圾收集器將把文檔保存在內存中;如果 它沒有從表中引用,那麼它就有資格獲得 垃圾收集。它引用從一個全局變量 ;但它仍然會從表不存在於 上文件()另一個電話再次使用相同的URI事件)
而且從邁克爾·凱另一個發現在Altova maillist:
In S如果使用doc()或document()函數,那麼文件 將被加載到內存中,並且將保留在內存中,直到 運行結束,以防萬一它再次被引用。所以你會遇到與大量小文件一樣的 內存問題,因爲一個大文件 - 實際上更糟糕,因爲每個文件的開銷很大。
然而,有一個變通方法:一個擴展函數 撒克遜:丟棄文檔()一種使文件從 存儲器由垃圾收集只要沒有更多 引用它被丟棄。
我發現這個鏈接:http://www.altova.com/list/xsl-list/200501/msg1000132384.html 並通過使用這種方式的內存使用下降了很多。但任何更多的信息將有助於使用此命令 –