2

この質問は、Java JTree または Window .Net Tree (Winforms) または Adob​​e Flex Tree に関するものです。

クライアント/サーバー アプリケーション (Flex の場合、実際には Web です) には、階層データを含むツリーがあります (Windows Explorer タイプのインターフェイス内)。現在、ユーザーがサーバーからより多くのデータを要求すると、ツリーを遅延ロードします。これは問題なく、約 750K ノード (.Net Winforms および Adob​​e Flex で経験的にテスト済み) までは機能しますが、その後は遅くなります。しかし、データベースは急速に拡大し (主に、ユーザーが大量のノードを貼り付けることができるため)、2,000 万ノードのデータベースはまったくありそうもないことではありません。

ガベージ コレクターがメモリを解放できるように、ブランチが折りたたまれているときにツリーからデータを解放する必要がありますか? これは問題ありませんが、ユーザーが効率的でなく、ブランチを折りたたまない場合はどうなるでしょうか? しばらく触れられていないブランチを閉じるメモリ管理モジュールを実行する必要がありますか?

メモリ不足にならないようにするには、これはすべて大変な作業のように思えます。

編集:ノードの崩壊時にデータを解放する必要がありますか? もしそうなら、いつ?弱いオブジェクト キャッシュのアイデアは良いですが、UI が壊れるまで引き続き UI をいっぱいにする必要がありますか (それは悪いアイデアではないかもしれません)。

4

2 に答える 2

1

私が見たほとんどのフレームワークでは、ツリー構造自体はかなり効率的ですが、各ツリーの葉に重要なオブジェクトがある場合、すぐに追加されます。

最も簡単なのは、ツリーの葉に何も保存しないことですが、レンダリング/描画/更新/その他のメソッドで、弱参照キャッシュからオブジェクトを選択します。そこにない場合は、サーバーからロードします。トリックは、オブジェクトへの他の参照を保持せず、キャッシュ上の弱い参照のみを保持することです。そうすれば、引き続き利用できますが、必要に応じて収集されます。

于 2008-11-12T22:34:20.080 に答える
1

ユーザーがブランチを折りたたまない場合、750K から 20M のノードをスクロールすることになると思いますよね? ユーザーのPOVから見ると、私にはかなり非効率的です。したがって、問題は自己強制的なものになる可能性があります。

于 2008-11-12T22:43:38.127 に答える