C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#のDataGridView


(過去ログ 173 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■99518 / inTopicNo.1)  C#のDataGridView
  
□投稿者/ 星は昴 (36回)-(2022/04/20(Wed) 21:21:05)

分類:[C#] 

 久しぶりの質問です。
 20年前 Delphi5 で作成したガウスジョルダン法で連立一次方程式を解くアプリを C# に移植したのですが、たかだか10元程度の連立方程式でも DataGridView の表示が目に見えて遅い(体感的に0.2秒くらい^^;)です。何も計算しないで方程式の変数を増やすとき、それに応じたセルの表示が遅いです。Delphi5 の方は 32 ビットアプリにもかかわらず瞬時に表示します。そこで

https://tt195361.hatenablog.com/entry/2015/06/12/084110

を参考に

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; //これはデフォ
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; //これもデフォ
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

としましたが全然効果がありません。連立一次方程式のアプリはお遊びなのであまり気にしていないのですが、同じく移植したFFT のアプリではもっと大きなサイズを普通に扱うのでちょっと困ります。C#は遅いのだからあきらめろと言われました(笑)。
 
 やはりあきらめるしかないのでしょうか。
引用返信 編集キー/
■99519 / inTopicNo.2)  Re[1]: C#のDataGridView
□投稿者/ 魔界の仮面弁士 (3332回)-(2022/04/20(Wed) 22:12:40)
2022/04/21(Thu) 09:55:22 編集(投稿者)

No99518 (星は昴 さん) に返信
> DataGridView の表示が目に見えて遅い(体感的に0.2秒くらい^^;)です。

データの受け渡しを
 dataGridView1[columnIndex, rowIndex].Value = newValue;
などで行っていないでしょうか?
セルに直接アクセスすると、その親行が非共有になり、そのたびに
新しい DataGridViewRow のインスタンスが作成されてしまいます。


効率的なメモリ使用のためには、共有行を使わせるために
 dataGridView1.DataSource = バインドソース;
のようにして、DataGridView 自体ではなくソース側(例えば DataTable)を
編集するようにします。条件次第では仮想モードを使うという選択肢もアリ。


あるいは、.Rows.Add や .Rows.Insert を使う方法もありますが、こちらも
Add(object[]) や Insert(object[]) なオーバーロードは
非共有行になるので避けるようにします。


セルスタイルも同様で、極力、個別のセルに対して割り当てることは
避けるようにします(DefaultCellStyle を使う)。データ依存で色などを
変更したい場合は、CellFormatting イベントを使うのが良いでしょう。


その他、こちらの記事も参照してみてください。
[Windows フォーム DataGridView コントロールでのパフォーマンス チューニング]
https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/performance-tuning-in-the-windows-forms-datagridview-control?view=netframeworkdesktop-4.8
引用返信 編集キー/
■99520 / inTopicNo.3)  Re[2]: C#のDataGridView
□投稿者/ 星は昴 (37回)-(2022/04/21(Thu) 07:30:48)
 丁寧な回答まことにありがとうございました。アドバイスに従い実行してみます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -