約 1/2 百万レコードのバインドされた datagridview があり、任意の列で並べ替えることができます。GUI では、ユーザーは任意の数の行を選択できます (すべての行を CTRL+A で選択する場合もあります)。別のソースから、レコード ID の大きなリスト (最大 1000) を取得し、それらの ID のどれが選択した行に対応するかを調べる必要があります。私は多くのアプローチを試しましたが、どれも十分に高速ではありません。例えば:
SelectedRows の数は 20 万分の 1 のオーダーになる可能性があるため、選択された行のコレクションをループして ID リストで一致を探すことは問題外です。
また、ID のリスト (通常は 1000 のオーダー) をループしてみました。ID ごとに BindingSource.Find("Id", Value) を実行して、各 ID の行インデックスを取得し、行が選択されています。これは、グリッドが ID でソートされている場合は正常に機能しますが、そうでない場合、Find() のパフォーマンスは 1000 回呼び出すにはあまりにも貧弱です。
つまり、行オブジェクト ID を指定して、最大 1000 行の Row.Selected 状態をすばやく見つける方法が必要です。DataGridView または DataBinding がこれを処理できるはずですが、その方法は明らかではありません。前もって感謝します!