9
2つの画面のいずれかでのDataGridViewのひどい再描画パフォーマンス
私は実際にこれを解決しましたが、後世のために投稿しています。 デュアルモニターシステムのDataGridViewで非常に奇妙な問題が発生しました。この問題は、コントロールの再描画が非常に遅い(完全な再描画の場合は30秒など)として現れますが、それが私の画面の1つにある場合に限ります。一方、再描画速度は問題ありません。 私は最新の非ベータドライバー(175.何か)を搭載したNvidia 8800GTを持っています。ドライバーのバグですか?私はこの特定の構成で生きなければならないので、それを空中に残しておきます。(ただし、ATIカードでは発生しません...) ペイント速度はセルの内容とは関係ありません。カスタム描画では、塗りつぶされた長方形をペイントするだけでも、パフォーマンスはまったく向上しません。 後で、(System.Windows.Forms.Integration名前空間からの)ElementHostをフォームに配置すると問題が修正されることがわかりました。それを台無しにする必要はありません。DataGridViewもオンになっているフォームの子である必要があります。Visibleプロパティがtrueである限り、サイズを(0、0)に変更できます。 .NET 3 /3.5の依存関係をアプリケーションに明示的に追加したくありません。リフレクションを使用して、実行時に(可能であれば)このコントロールを作成するメソッドを作成します。それは機能し、少なくとも必要なライブラリがないマシンでは正常に失敗します-ただ遅い状態に戻ります。 この方法では、アプリの実行中に修正を適用することもでき、フォームでWPFライブラリがどのように変更されているかを簡単に確認できます(Spy ++を使用)。 多くの試行錯誤の末、(フォームだけでなく)コントロール自体でダブルバッファリングを有効にすると問題が修正されることに気付きました。 したがって、DataGridViewに基づいてカスタムクラスを作成するだけで、DoubleBufferingを有効にできます。それでおしまい! class CustomDataGridView: DataGridView { public CustomDataGridView() { DoubleBuffered = true; } } グリッドのすべてのインスタンスがこのカスタムバージョンを使用している限り、すべて問題ありません。これが原因でサブクラスソリューションを使用できない状況に遭遇した場合(コードがない場合)、そのコントロールをフォームに挿入しようと試みることができると思います:)(私はリフレクションを使用して、DoubleBufferedプロパティを外部から強制的にオンにして、依存関係をもう一度回避しようとする可能性が高くなります)。 こんなに単純なことが私の時間の多くを食い尽くしたのは悲しいことです...