2008-09-11 13 views
2

データベースからテーブルを読み取るアプリケーションがあります。データベースによって駆動されるオブジェクトを作成してツリービューを作成する - 非常に遅い

結果から収集した一意の文字列値に基づいて結果セットを取得するためにSQLクエリを発行します。ケース/スイッチ文を使用して特定のオブジェクトを生成します(TreeNode BTWを継承します)。これらの作成されたオブジェクトは、後で使用するために辞書オブジェクトに分けられます。

これらのオブジェクトを生成する間、結果セットの値の一部を使用して、セッターを介してオブジェクトに値を設定します。

特定のオブジェクトタイプを返すようにディクショナリに問い合わせて、それを使用してツリービューを作成します。しかし、同じタイプの2つのオブジェクトをツリービューのDictionaryオブジェクトから読み込むことはできません(ランタイムエラーが発生します - これは私を現時点でエスケープします。ですから、私がしなければならないことは、memberwiseCloneを使用してIClonableを実装してこれを回避することです。

私はこの権利を行っていますか?より良い方法がありますか?これは私のプログラムが現時点では本当に遅くなっていると思うからです。少なくとも私は、私よりも知っている人のアドバイスが大変に評価されています。

答えて

1

必要なだけのツリーを移入、Brad @に追加します。これは、ツリーノードの展開イベントにフックすることを意味します。これは、ネットワーク共有を処理する場合のWindows Explorerの機能と似ています。

ツリーに実際のツリーノードあたり1つのTreeNodeオブジェクトがあるはず - 物事を再利用しようとしないでください。 Tagプロパティ(これは推奨されるメソッド)を使用してデータに関連付けることも、TreeNode自身をサブクラス化することもできます(これはJavaメソッドですが、.NETではあまり使用されません)。

(クローニング法の使用は通常、あなたが(a)は何か間違ったことをやっているのいずれかのヒントである、または(b)は不変から変更可能なオブジェクトを分離するために、あなたのドメインモデルを考慮する必要があります。)

2

外部辞書を使用している理由はありますか?私は、データが照会されると、ツリーに直接データを設定します。

辞書が必要な場合は、ツリーノードの.Tagプロパティを辞書のデータを指すように設定できます。

0

はあなたを持っていますユーザーが実際に見たいノードだけをロードするVirtual Treeビューを使用すると考えられています.-私は、www.infralution.comのコンポーネントでうまくいっています。

関連する問題