私たちのプロジェクトでUIを最適化すると、ListViewで本当に変わったような気がして、どこから来たのか理解できませんでした。 3815ミリ秒:BeginUpdateメソッド()+ EndUpdateの()付きWinForms ListViewとTreeView:奇妙なパフォーマンスの問題
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
- - 2317ミリ秒:
listView1.BeginUpdate();
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
listView1.EndUpdate();
隠すと()+:リストビューに5000個の要素(リストビュー)を追加
シンプルショー() - 163ms(NO MISTAKE、10倍以上):
listView1.Hide();
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
listView1.Show();
スタイルも変更されました。 今は2列の代わりに4を持っています。
なぜこのように高速ですか? さらに、隠しリストビュー(Visible:false)で始まり、人口集計後にそれを表示するのが同じパフォーマンス向上をもたらさないのはなぜですか?
TreeViewとは異なります。シンプル5000個のノードの追加 - 2130ミリ秒:隠す()+ショー()で
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
から1048ミリ秒:BeginUpdateメソッド()+ EndUpdateの()付き
treeView1.Hide();
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
treeView1.Show();
から291ミリ秒:
treeView1.BeginUpdate();
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
treeView1.EndUpdate();
を
あなたの項目をリストに追加し、 'AddRange(...) 'を呼び出すと、コントロールを動的に割り当てるようにするのではなく、手動で列を指定する必要があります。 – Seph