ツリービューにデータを取り込むためにデータベースによって駆動されるオブジェクトを作成する - 非常に遅い

StackOverflow https://stackoverflow.com/questions/56224

質問

データベースからテーブルを読み取るアプリケーションがあります。

SQL クエリを発行して、結果から収集した一意の文字列値に基づいて結果セットを取得し、case/switch ステートメントを使用して特定のオブジェクトを生成します (オブジェクトは TreeNode を継承します)。これらの作成されたオブジェクトは、後で使用するために Dictionary オブジェクトに取り込まれます。

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

Dictionary にクエリを実行して特定のオブジェクト タイプを返し、それをツリービューに設定するために使用します。ただし、Dictionary オブジェクトからツリービューに同じタイプの 2 つのオブジェクトを設定することはできません (実行時エラーが発生します。これは、同じオブジェクトを参照することに起因するため、現時点では回避できます)。したがって、私がしなければならないことは、memberwiseClone を使用し、IClonable を実装してこれを回避することです。

私はこれを正しくやっていますか?もっと良い方法はありますか - この時点でプログラムが非常に遅くなっているのはこれが原因だと思うからです。少なくとも、それは少し不格好だと思いますが、私よりも詳しい人からのアドバイスは非常にありがたいです。

役に立ちましたか?

解決

@に追加するにはブラッド, 、必要な場合にのみツリーにデータを入力します。これは、ツリー ノードの展開イベントにフックすることを意味します。これは、ネットワーク共有を扱うときの Windows エクスプローラーの機能に似ています。

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

(クローン作成メソッドの使用は、通常、(a) 何か間違ったことをしているか、(b) ドメイン モデルを因数分解して可変オブジェクトと不変オブジェクトを分離する必要があることを示唆しています。)

他のヒント

外部辞書を使用する理由はありますか?データがクエリされると、ツリーに直接データを入力します。

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

ユーザーが実際に見たいノードのみをロードする仮想ツリー ビューの使用を検討しましたか - www.infralution.com のコンポーネントでうまくいきました

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