WinForms UIには、2つのタブページを持つタブコントロールが含まれています。1つのタブで、ユーザーがリスト内の文字列を追加、編集、および削除できるように、最大100,000個の文字列のリストを表示する必要があります。2番目のタブで、最初のタブの文字列の「読み取り専用」コピーを表示する必要があります。また、ユーザーが「読み取り専用」リストから2番目の無関係なリストに文字列をコピーできるようにする2番目のタブのコントロールも必要です。
私は現在、配列に100kの文字列があり、最初に考えたのは、リストボックスを使用してそれらを表示することでした。配列をループして、最初のタブのリストボックスに文字列を個別に追加できます。SuspendLayout()とBeginUpdate()を使用すると、表示に約1.5秒かかります。残念ながら、リストボックスに最大65,000を超えるアイテムを追加すると、垂直スクロールバーの問題が発生します(これは、Vistaの頃に導入されたリストボックスコントロールのバグのようです)。文字列データはリストボックスにバインドされていないため、基本的に同じデータセット全体を2番目のタブの別のリストボックスに追加します。アプリを起動し、文字列がリストボックスに追加されるのを待ってから、2番目のタブを選択しようとすると、2番目のタブが応答するのを待つ間、パフォーマンスが非常に遅くなります。私' mこれがリストボックス内のデータの量に関連していると仮定します。とにかく、2番目のタブが応答するようになったら、2つのタブページをはるかに少ない遅延で切り替えることができます。
テストとして、両方のリストボックスを配列にバインドしようとしましたが、パフォーマンスの観点からは何の違いもありませんでした。そして、スクロールのバグはおそらくリストボックスを私にとって使用できないオプションにするでしょう。そこで、リストモードでリストビューコントロールを1つの非表示の列ヘッダーで試しました。文字列データを個別のListViewItemとして追加しても、パフォーマンスに大きな違いはありません。2つのlistviewコントロールを配列にバインドしようとしましたが、listviewコントロールは設計時のデータバインディングをサポートしていないようで、自分で実装しようとしても大きな違いがあるかどうかはわかりません。
100,000文字列(最大)はユーザーが処理するデータが多いことは知っていますが、アプリケーション内のすべての文字列データを使用できるようにする必要があります(最悪の場合、QAチームが最初に開始します)でテスト!)。この量のデータと必要な機能に役立つ別のコントロールはありますか?それとも私はこれについてすべて間違っているのですか?