2012-03-14 10 views
3

対私は..だから、JSF1.2とRichFacesの3.3.2にJavaのパフォーマンス:私はツリーノード(80Kのようなもの)をたくさん持っている、そしてそれは遅いですので、地図一覧

をツリーページネーションを構築してきました最初の試みとして、私はページとページのノードのリストでHashMapを作成します。多分HashMapのよりも早く何か、リストか何かのリストである場合

しかし、パフォーマンスが十分ではありません...

は、だから私は思っていました。

誰かこれにいくつかの経験がありますか?私に何ができる?

ありがとうございます。


EDIT。

大きな問題は、ツリーの子ノードでユーザーのアクセス許可を検証する必要があることです。私はこれが大きな問題であることを知っていました。この検証は遅いです。なぜなら、ノードの中に入っていなければならないため、ユーザーがすべてのノードを反復せずに第10レベルのノードで許可を得ているかどうかを知る良い方法はありません。これに加えて、同じ3つは、より多くの場所で使用されています... なぜ私はこのページネーションをやっていたの基本的な理由は、richfacesによって生成された構造のために、クライアント側は非常に遅くなるだろう、 tdの、ブラウザはちょうどこれで夢中になる。 残念ながら、私はすべてのノードをロードしてクライアント側にページを貼り付けなければならず、どのオブジェクトが反復するのが速いのかを知る必要があります...

申し訳ありません。

+0

おそらくduplicat http://stackoverflow.com/questions/1518103/hashmap-vs-arraylist-performance-am-i-correct – MJM

+10

これはあなたが使用しているコレクションの問題ではありません。 1つのコレクションにすべてのデータをロードするのは間違いですが、ページ設定の背後にある全体のアイデアは、その時点で必要なデータの関連するサブセットのみをロードすることです。 – Viruzzo

+0

それはそれらのコレクションの使い方と遅いことによります。そのページネゴシエーションをどのように実装するかについていくつか詳しく説明できますか?また、コードをプロファイルしましたか?もしそうであれば、遅い部分は何だったのですか?構造体へのアクセス/塗りつぶし、データや式のページへのロード? – Thomas

答えて

7

ページのすべてのノードを取得する場合、ハッシュマップは最も高速なデータ構造です。ノードのリストは一定時間(O(1))に取り出すことができますが、時間はO(n)です(n =ページ数、ソートされたリストの方が速いがO(1)の近くには決してない)

データ構造上の操作はが遅すぎますです。それが最適化を開始する前に分析する必要があります。

2

JSFはデータ構造の選択肢よりも性能が高いということが原因です。私がJSFアプリケーションを作成しようとしてきた1つの試みは、日時計でタイムアウトすることができます。

根本的な原因が分かっていなくても、解決策を推測して間違いを犯しています。私は時間を費やしている場所を知るためにあなたのアプリのプロファイルを作成することをお勧めします。

+0

+1:あなたのアプリケーションのパフォーマンスを測定していない場合、あなたは推測しているだけです。私は、あなたのプロフィールの結果にHashMapが現れないことに気付くでしょう。 ;) –

0

私はこの問題を子ノードをフェッチするjavascript/ajax callsメソッドで解決します。

2

使用するデータ構造は、データの格納方法とアクセス方法に依存します。 HashMap<K, V>は、キーを提供して、値にアクセスする際に一定の時間の複雑さを持つと考えられています。 get(key)に電話すると、keyhashCode()が計算され、関連する値を取得するために使用されます。同じハッシュコードを持つ異なるキーを持っていない限り(この場合は、何か間違っている可能性がありますが、少なくとも異なるケースでは異なるハッシュコードを持つ必要があります)、通常これは高速です。

プレーンリスト内の要素を検索するには、リストをスキャンする必要があります。ハッシュコードを計算するよりも(ほとんど)遅くなります。

値をキーに関連付ける必要がある場合は、Mapがあります。 HashMapは十分速くなければなりません。

JSFについてあまりよく分かりませんが、データ構造とアクセスパターンがMapのために設計されていれば、問題はHashMapではありません。

関連する問題