質問

Windowsフォームに表示する必要がある大きなデータベーステーブルがあります。データは、ある種の「カテゴリリスト」です。ツリービューのような構造でユーザーに表示する必要がありますが、より多くのサブカテゴリを持つカテゴリがあります。ツリービューコントロールには読み込みの遅延がありますが、問題は4つの列文字列値を持つ10万のルートノードが存在する可能性があることです。ツリービューに100000ノードを追加しようとしましたが、完了するのに5分かかりました。そのような操作のための他のオプションはありますか?アイデアをいただけますか?ツリービューである必要はありません。

役に立ちましたか?

解決 5

ツリービューに仮想/サーバーモードを実装することにしました。

回答ありがとうございます。

他のヒント

それは多くのノードですが、ノードのリストをツリービューに追加したときに、BeginUpdate()を呼び出してからEndUpdate()を呼び出しましたか?それはおそらくあなたのパフォーマンスを少し上げるでしょう!

http://msdn.microsoft .com / en-us / library / system.windows.forms.treeview.beginupdate.aspx

このようなアプリケーションの場合、「入力時に検索」などの機能を実装する傾向があります。これは、テキストボックスに入力されたカテゴリ名を返します。たとえば、各キーストロークで、DBに戻り、テキストボックスの内容で始まる上位10程度の値を返します。 10を超える結果がある場合、より多くの結果が存在することを示すか、検索を絞り込むように指示します。 IMO直接検索は、常に並べ替えやページングよりも優先されます。私はページングが嫌いです。ほとんどの場合、検索機能が十分でないことは認められます!

おそらく、何らかのページングメカニズムを実装します。 TreeViewの100,000アイテムは、ユーザーの観点から読むのが非常に困難です。一度に1,000個以下のルートノードを提供するだけで、ロード時間は確実に削減されます。

キャッシュ機能を使用できます。 20000レコードは通常、ロードに0.2秒かかります。使用するには、言語サポートを確認してください。

よろしく、

TreeViewには、BeforeExpandイベントがあります。これを使用して、ロードするノードコンテンツを即座に決定できます。つまり、最初にTreeViewの最上位ノードのみをロードします。

ユーザーがノードを展開しようとしている場合、必要なデータを取得して、そのノードのサブノードを埋めることができます。 TreeNodeのTagプロパティを使用して、どのデータがどのノードに属するかのIDを保存します。

BeginUpdate()およびEndUpdate()を使用するか、Add()の代わりにAddRange()を使用してノードを追加してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top