19

(英語が下手でごめんなさい)

再塗装時の性能に大きな問題がありますDataGridView

を使用してDataGridView、外部アプリケーションストリームからのログを表示しています。ストリームからのメッセージは高頻度(1ミリ秒未満)で着信します。DataGridView新しいメッセージが届くたびにすぐに新しい行を追加するとDataGridView、次のメッセージが届く前に自分自身を再描画する時間がありません。

DataGridView考えられる解決策は、キューを使用してメッセージを収集し、キューからのメッセージで100ミリ秒ごとに再描画することです。これは良いことですがDataGridView、最後の行に自動スクロールすると点滅します。(スムーズスクロールは無効になっています)

DataGridViewパフォーマンスの向上を手伝ってもらえますか?

4

6 に答える 6

46

最近、いくつかの速度低下の問題がDataGridViewありましたが、解決策は次のコードでした

public static void DoubleBuffered(this DataGridView dgv, bool setting)
{
    Type dgvType = dgv.GetType();
    PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
          BindingFlags.Instance | BindingFlags.NonPublic);
    pi.SetValue(dgv, setting, null);
}

オブジェクトのダブルバッファリングをオンにしDataGridViewます。DoubleBuffered()DGV を呼び出すだけです。それが役に立てば幸い。

編集:私はこれをSOから外したかもしれませんが、今はオリジナルを検索できないので、これはコードが私のものではないことを強調するためです.

于 2010-11-23T10:57:24.000 に答える
9

グリッド ビューのダブル バッファリングを有効にしましたか?

私の2つの画面の1つでDataGridViewの恐ろしい再描画パフォーマンスを見てください

まだいくつかのアイデアを持っていない場合

于 2010-11-23T10:57:33.130 に答える
3

大量のデータを扱う場合、DataGridView注意して使用しない限り、コントロールはオーバーヘッドで大量のメモリを消費する可能性があります。メモリが限られているクライアントでは、メモリ コストが高い機能を避けることで、このオーバーヘッドの一部を回避できます。

シナリオに合わせてメモリ使用量をカスタマイズするために、仮想モードを使用してデータ メンテナンスおよび取得タスクの一部またはすべてを自分で管理することもできます。詳細については、dapfor を参照してください。コム

于 2012-11-16T06:37:40.337 に答える