3

TTreeView多くのノード(通常は20,000ノード以上)を持つがあります。これTTreeViewは、ドッキングされたインターフェイス(DevExpressドッキングライブラリ)で使用されます。アプリケーション内のフォームがドッキングまたはドッキング解除されると、ドッキング可能なフォームのハンドルが変更されます。これにより、すべてのフォームとコントロールのDestroyWndとプロシージャが呼び出されます。CreateWnd

の場合、ノードをストリームTTreeViewに保存して再ロードします。ツリービューが非常に大きいアプリケーションでは、ノードがストリームアウトおよびストリームインされる間、これにより長い遅延が発生します。DestroyWndCreateWnd

私の質問:この遅延を防ぐ方法は?多くの人がVirtualTreeViewの子孫ではないと私が信じていることを高く評価していると聞きましたTTreeViewが、この問題を回避できますか?Developer Expressを試しましたTcxTreeViewが、TTreeviewから派生しているため、同じ問題が発生します。

4

1 に答える 1

12

20,000ノードは、標準に入れるには多すぎますTTreeView。を使用するTVirtualTreeViewことは、間違いなく、多数のノードを表示するための方法です。主な利点は、ノードデータがTreeView自体に保存されないことです。これは、表示とユーザーの操作にのみ使用されます。データをメモリ内の別の場所に保存して、ウィンドウの再作成の影響を受けないようにします。次にTVirtualTreeView、いつでもすぐに必要なデータだけを要求します。ウィンドウTVirtualTreeViewの再作成は、ウィンドウ表示を現在のデータで再描画するだけです。

TTreeViewTreeView自体にデータを格納する標準とは異なります。そのためTTreeView.DestroyWnd()TTreeView.CreateWnd()ウィンドウが再作成されるたびに、すべてのノードデータのコピーを保存および復元する必要があります。ノードが多いほど、そのデータを管理するためのオーバーヘッドが大きくなります。

于 2012-04-19T01:35:06.090 に答える