2

重複の可能性:
大きな XML ファイルのループ

本質的にJavaおよびJavaベースのフレームワークのXMLデータのコレクションである大きなXMLデータを解析するより良い方法は何ですか? 数 MB (通常は 25MB 以上) の Web サービス呼び出しからデータを取得します。このデータは、基本的に、マーシャリングされていないオブジェクトのリストに対応します。私の目的は、XML からオブジェクトのリストを作成することです。

SAX パーサーを使用してみましたが、これらの 3000 個のオブジェクトを解析するのに 45 秒かかりました。

他の推奨されるアプローチは何ですか?

4

4 に答える 4

2

代わりにプル解析を試してください。StAX を使用しますか? 比較の最初の検索ヒット: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html

ボトルネックがどこにあるかをプロファイリングして確認しましたか?

StAX は Java に組み込まれています (Java 6 以降) が、さらに優れたパフォーマンスのために woodstox StAX 実装を推奨する人もいます。私はそれを試していません。http://woodstox.codehaus.org/

于 2012-05-09T19:58:09.953 に答える
1

SAX パーサーを使用してみましたが、これら 3000 個のオブジェクトを解析するのに 45 秒かかりました。他の推奨されるアプローチは何ですか?

次のオプションのみがあります。

DOM  
SAX  
StAX  

SAX はSAXvsDOMvsStaxで最速なので、別のスタイルに切り替えてもメリットはないと思います。
あなたが今何か間違ったことをしていない限り、
もちろん、JAXBなどのマーシャリング/デマーシャリングフレームワークもありますが、IMO(測定は行われていません)は、XML処理に抽象化の追加レイヤーを追加するため、遅くなる可能性があります

于 2012-05-09T20:03:30.790 に答える
0

SAX は XML ファイルの構造へのランダム アクセスを提供しません。これは、SAX が比較的高速で効率的な解析方法を提供することを意味します。SAX パーサーは一度に 1 つの要素しか処理しないため、実装は非常にメモリ効率が高く、多くの場合、大きなファイルを処理するための 1 つの選択肢になります。

于 2012-05-09T20:05:09.093 に答える
0

25Mb の XML を解析するのに 45 秒もかからないはずです。他にも何かが起こっています。おそらくほとんどの時間は、外部の DTD が Web から取り出されるのを待つことに費やされているのではないでしょうか。アプローチを変更する前に、コストがどこから発生しているのかを理解し、変更によってシステムのどの部分が恩恵を受けるかを理解する必要があります。

ただし、本当に XML を Java オブジェクトに変換したい場合 (私が選択するアプリケーション アーキテクチャではありませんが、気にしないでください)、JAXB が適しているように思えます。私は XSLT や XQuery などの XML 指向の言語を使い続けることを好むため、JAXB はあまり使用していませんが、JAXB を試してみると、かなり高速であることがわかりました。もちろん、その下で SAX または StAX パーサーを使用します。

于 2012-05-10T08:41:31.000 に答える