1

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チームが最初に開始します)でテスト!)。この量のデータと必要な機能に役立つ別のコントロールはありますか?それとも私はこれについてすべて間違っているのですか?

4

2 に答える 2

1

ユーザーに一度に50を超える文字列を提供することで、ユーザーを支援することはないと思います。DataGridViewを使用すると、これにより適したオンデマンドでロードできます。VirtualModeを参照してください。または、ユーザー入力時にリストボックスにアイテムを手動でロードすることもできます。これははるかに優れています。その前線で顧客を説得して、一度に10万本の弦を持っていることは良いことよりも害を及ぼすだけであることを納得させてください。

DataGridViewsは単純な文字列を表示するには多すぎると思いますが、将来的にはより多くの機能(より多くの列など)を提供する柔軟性を提供します。その大量のデータをgridiviewに取り込む方法については、検索を実行してください。そこにはたくさんのスレッドがあります。ここに2つの良いスターターがあります

http://www.codeproject.com/Articles/38735/Load-a-billion-rows-in-a-DataGridView

使用する方が良いのは、大量のデータを表示するためのDataGridまたはListViewですか?

私が言ったように、最良の選択肢はデザインを再考することです..

于 2012-12-15T02:08:56.447 に答える
0

同様の(〜正確な)問題があります。「再設計」に対して提案された解決策は、真の解決策ではありません。ユーザーが「数十億」のアイテムを表示するために実際に使用できない(または必要がない)という考えは、100%正確ではなく、仮定を立てています。私たちの場合、ユーザーは多くの(100k以上)アイテムをスクロール(参照)できる必要があります....はい、これは人間がソフトウェアを使用して整理されたスキャンされた3D座標データを処理するために簡単に可能で必要です。

すっごく、system.windows.forms.ListBox(C#で使用される)の代わりに多数のアイテムを許可するListViewコントロールの必要性はまだ残っています。Visual Studio C#2012で提供されるNET system.windows.forms.ListBoxは、大きなリストを許可しますが、itmesカウントが約60,000 +-に近づくと、適切なスクロールを許可しません。

そういうものだ!

于 2014-02-17T23:08:57.457 に答える