2012-03-28 13 views
0

Saxon Javaライブラリを使用して2つのファイルをマージしています。 XSLTファイルはhereにあります。Saxonライブラリを使用しているときのCPU使用率が高い

2つの小さなxmlファイル(それぞれ〜15ノード)であっても、Saxonがファイルをマージすると、CPU使用率が急上昇することがわかりました。私はまた、小さなXMLファイル(〜15ノード)の他のユースケース変更属性にSaxonを使ってみましたが、同じ結果が見つかりました。

一般に、XSLTはCPU集約型タスクを処理していますか?それともサクソンの知られている行動ですか?

答えて

3

私はOliver BeckerのマージスタイルシートがO(n^2)の性能を持っていると思っています。つまり、入力のサイズを倍にすると4倍の時間がかかります。これはXSLTの一般的なプロパティではなく、Oliverが使用しているアルゴリズムのプロパティです。 XSLT 2.0のdeep-equal()関数を利用することで、コードをもっと効率的に(おそらく二次的に)作ることができるかもしれませんが、これよりも根本的なオーバーホールには、異なるアルゴリズムの設計が必要です。 2つのツリーが等価であるかどうかの後続のテストが2つのハッシュコードの比較に削減されるように、各ノードのハッシュコードを計算する両方のツリーを通過します。

1

IMHO XSLTは非常にCPUを大量に消費しますが、小さなファイルの場合は依然として短くする必要があります。

小さなファイルを変換するのにかかる時間を確認するための簡単なベンチマークを書くことをお勧めします。あなたのJVMが少なくとも10,000xの変換を行うことでウォームアップしていることを確認し、ウォーミングアップ後に少なくとも2秒間繰り返して実行するとどのくらいの時間がかかるかテストします。

関連する問題