.Net 4.0 と VS2010 を使用しています。
私のプログラムは、バインディングリストを更新し、DataGridView を介してリストを表示するマルチスレッドの get リクエスト送信者です。datagridview は仮想モードです。さらに、リクエストのステータスを表示するテキスト ボックスとステータス バーを作成します。通常、1 つのリクエストは、テキスト ボックスに 4 ~ 5 行を追加し、ステータス バーの数字を変更します。
ワークロードは同じままで、2 秒ごとに 1 つのリクエストです。リクエストは高速で、ほとんどの場合、1 つのリクエストだけが目立ちます。新しいリクエスト スレッドは、最後の古いリクエスト スレッドによって呼び出されます。UI は、begininvoke とデリゲートを使用してスレッドごとに数回更新されます。
MyInvoke mi = new MyInvoke(change);
this.BeginInvoke(mi, new Object[] { true, "Row " + pos + " standing by...", (pos + 1),0 });
メモリ使用量 30MB で、最初に datagridview に 3000 件のリクエスト全体を表示します。メモリ使用量 4XMB で 2XXX リクエストに到達すると、ステータス バーの番号とテキスト ボックスの更新がどんどん遅くなることがわかります。たとえば、2000 -> 2001 -> 2002 -> 2003 は 2000 -> 2003 になります。
アプリケーション ウィンドウを選択すると、UI 全体がフリーズすることさえありました。私のデータグリッドビューは、仮想モードでいくつかの行に固定されています。UIスレッドの問題だと思います。フリーズしたら、すべてのリクエストが完了してすべてがスムーズになるまで待つことができます。
何が起こっているのかについて何か考えはありますか?