2009-08-11 7 views
3

私はDataGridViewの更新を行うCPU時間の大部分を使用しているようなC#/ .Netアプリケーションを持っています。私は1.5秒ごとに手動でデータを更新し、変更されたデータのみを更新します。これは1.5秒ごとに約250件の更新となります。私は1.5秒をはるかに少ない数(おそらく0.5秒)に減らしたいと思います。できるだけプロファイリングして最適化しましたが、パフォーマンスは問題ありませんが、より速くしたいと思います。DataGridViewのパフォーマンス - ビデオカードによって異なりますか?

私の質問は、NVIDIA FX1800からNVIDIA FX3800へのビデオカードのアップグレードが大幅に高速化することですか?

答えて

1

GDI +の操作は、すべてのグラフィックカードがサポートする基本的な高速化操作(線、矩形など)のみを使用するため、グラフィックCPUの多くに依存しません。

ここでの問題は、更新中にコントロールを「隠していない」ということです。入手可能な場合はBeginUpdate/EndUpdateメソッドをチェックしてください。そうでない場合は、表示をfalseに設定し、更新してtrueに設定すると問題が解決されることがあります。

1

あなたの時間は、画面の描画に費やされることはほとんどありませんが、データの内部表現の更新にはほとんど時間がかかりません。

EDIT:時間が費やされている場所

プロファイラに見て、見つけるために。私は個人的にそれを好むからRed Gate

1

私の勇者は "いいえ"

CPU時間はGPU時間ではありません。 CPUがビューの更新中にビジー状態になっている場合は、システムをCPUフレンドリなビューに変更する必要があります。それは怠惰に読み込まれていないように聞こえ、すべてのデータとすべてのアップデートを取得しています。あなたの価値の範囲はどれくらいですか?多くの値を持っていない場合、これは問題ありません。私の疑惑は、あなたがたくさんの価値を持っており、リスト全体を記憶に残しているということです。これはいくつかの理由で悪いことです。多くのメモリが必要です。現在のディスプレイに影響する変更だけでなく、すべての変更に注意を払う必要があります。変更して更新するには多くのコンテンツが必要です。

データの一部のみを読み込む、よりフレンドリーなコントロールを探しています。

あなたが持っているグラフィックスカードは、非常に小さな秒で表示をレンダリングできるはずです。アプリケーションをつかんで画面上を激しく動かしてみてください。これにより、更新がどれほど迅速に行われるかがわかります(キャッシュされている可能性があるため、正確ではありません)。

あなたのリストはどれくらいですか?

ヤコブ

+1

私は実際に変更されたセルのPropertyChangedイベントを呼び出すだけです。これがあなたが "怠惰な読み込み"の意味であると思う/仮定しています。 DataGridViewの行数は約30行で約30行しかないため、膨大な量のデータが表示されません。この問題は、1秒あたりの更新数に関連しているようです。 –

+0

それは少し変わる。私は最新情報を全部取り替えることに亀裂を入れるだろう。 900個のセルのうち150個のセルがかなり更新されています。更新を止めることができない限り、すべての変更を更新し、更新を開始します(これは恐らくより速いでしょう)。 900セルは瞬間的でなければなりません。スクロール位置を記録し、UIをリフレッシュしてスクロール位置を復元します。うまくいけば、これはシームレスになるでしょう。これで動かない場合は、別のコントロールを探す必要があります。これは少量のデータです。レイジー・ローディングは、何千ものレコードの10分の1を考えていて、コントロールに100個ほどしか置いていませんでした。 – TheJacobTaylor

+0

申し訳ありませんが、私はあなたのことをよく分かりません - TheJacobTaylor - 上記のコメントを意味します。 「更新内容全体を交換する」とはどういう意味ですか?現在、Tickイベントハンドラが、変更されたセルのPropertyChangedイベントを発生させるTimerを持っています。このタイマーの間隔は1.5秒です。 また、「UIをリフレッシュする」と言うと、DataGridView.Refresh()を呼び出すことを意味しますか? –

0

は、私はほとんどないパフォーマンスの低下と、すべての50msに更新されたデータは、(そのことで、私はリスト全体を意味する)アプリケーションで1000件のリストを提示DataGridViewを使用しました。だから私はあなたがしたいことがDataGridViewのためにあまりにも多くあるとは思わない。
Eric J.が示唆しているように、コードをプロファイルする必要があります。パフォーマンスの問題はコード内のどこか他の場所から発生することがわかります。

+0

仮想モードを使用していますか? –

関連する問題