多くのサブ要素を含む大きなxmlファイルがあります。私はいくつかのxpathクエリを実行できるようにしたい。私はJavaでvtd-xmlを使ってみましたが、xmlがメモリに収まるほど大きいので、時々outofmemoryエラーが出ます。そのような大きなxmlを処理する別の方法がありますか?あなたが今やろうとしているどのような大きなファイル大きなxmlファイルの処理
答えて
は、XML文書のメモリー内表現を作成せずにサックスを使用してXPathを実行http://code.google.com/p/jlibs/wiki/XMLDog
を試してみてください。
は非常に効率的ですか?そのサウンドによって、DOMベースのパーサを使用しようとしています。パーサは、XMLファイル全体をDOM表現としてメモリにロードします。大きなファイルを扱う場合は、XML文書をストリーミング形式で処理するSAXパーサを使用する方がよいでしょう。
これは個人的にはStAXをお勧めします。
XPathをダイレクトSAXストリームで使用することはできません(クエリごとにファイル全体を再解析することはできません)。 –
@Glenn Maynard - 確かにOP *は各クエリ(またはクエリのバッチ)ごとにファイルを再解析する必要があります。 DOMは大きすぎてメモリに収まりません。 –
で作業するとき
標準vtdまたは拡張VTD-xmlを使用しましたか?拡張XMLを使用する場合は、メモリマッピングを使用するオプションがあります。これを試しましたか?
XPathを使用すると、長期間使用するアプリケーションで多くの式を動的にコンパイルすることはできません。
XPathのJavaバージョンがどのように機能するのかは完全にはわかりませんが、.NET XPathでは動的アセンブリをコンパイルしてアプリドメインに追加します。後で式を使用すると、アセンブリにメモリにロードされます。
XPathを使用していた状況では、この同じタイプのメカニズムがメモリリークと同様にメモリをいっぱいにしていました。
私の理論では、各式がユーザーの値を使用してコンパイルされるたびに、コンパイルされた各式は固有の可能性が高いため、新しい式がコンパイルされてアプリドメインに追加されました。
アプリケーションドメイン全体を再起動せずにアプリケーションドメインからアセンブリを削除することができるため、式が評価されるたびにメモリが消費され、回復できませんでした。その結果、コードはメモリ内のアセンブリの形でメモリをリークしていましたが、しばらくして結果が分かりました。
- 1. 大きなテキストファイルの処理
- 2. 処理大きな文書
- 3. Java:入力ストリームの大きなファイルの処理
- 4. 大きなHTMLファイルの印刷と処理を自動化
- 5. Pythonで大きなファイルを処理する最速の方法
- 6. Androidカメラアプリケーション - 大きなビットマップの処理
- 7. 大きなMXMLファイルを処理する方法
- 8. CFPropertyListで大きな.plistファイルを処理する
- 9. 大きなファイルを処理するには
- 10. gaeで大きなファイルを処理する方法
- 11. 大きなファイルのXML分割
- 12. 大きなファイルを処理しているときにjQueryのスロバキア
- 13. Androidで大きなXMLファイルを扱う
- 14. 大きなXMLファイルを作成する
- 15. 大きなXMLファイルを扱うEmacs
- 16. C#と大きなXMLファイルを読む
- 17. 大きなzipファイルの圧縮処理後に7Zipが終了しない
- 18. Rubyで大量のファイルを処理するときのスローダウン
- 19. C#で巨大ファイルを処理する
- 20. Linuxのメモリ管理と大きなファイル
- 21. HadoopでXMLファイルを処理する
- 22. XMLファイルを複数回処理する
- 23. 大きなバックグラウンドでのプレーヤーの動きの処理
- 24. haskellでスタックオーバーフローエラーなしで大きなファイルを処理する方法は?
- 25. 非常に大きなcsvファイルをタイムアウトとメモリエラーなしで処理する
- 26. Apache SolrでTeraByteの大きなデータを処理できるか
- 27. Javaの膨大なファイルを処理しています
- 28. Clojure - メモリ不足の膨大なファイルを処理する
- 29. PHP MYSQLを使用した大規模なCSVファイルの処理
- 30. NodeJS、大規模なCSVファイルの処理を約束する
なぜこの質問にPythonタグがありますか?人々がPythonソリューションを提供することを望んでいますか? – Spaceghost
ドキュメントを解析するときやxpathクエリを実行するときにメモリ不足が発生しますか? 2番目の場合、おそらく問題はxpathクエリです。 いずれにせよ、JVMのヒープのために-Xmxの値を増やしてみましたか? – Spaceghost
拡張vtd-xmlを試して、メモリマッピングオプションを使用してください –