投稿者 tel | 2012年9月8日

C#でListViewにColumnsとItemsを追加するときの注意

ListViewにアイテムを追加するのを高速化する方法として、BeginUpdate使うとかAddRange使うとか、よく書かれているけど全然違うところで遅くなっていたのでメモ。

Detail表示のListViewで最初にItemsを設定してからColumnsを設定するとものすごい遅い。
なので必ずColumnsを設定したあとでItemsを設定すること。

下記のコードでは先にColumnsを設定したときは92ms、あとでColumnsを設定したときは828msになった。

var sw = new Stopwatch();
sw.Start();

listView.BeginUpdate();

// さきにColumnsを設定する。
for (int i = 0; i < 10; i++)
{
    var column = new ColumnHeader();
    column.Text = "column";
    listView.Columns.Add(column);
}

for (int i = 0; i < 1000; i++)
{
    var item = new ListViewItem();
    item.Text = i.ToString();
    for (int j = 0; j < 9; j++)
    {
        item.SubItems.Add(string.Format("item {0} {1}", i, j));
    }
    listView.Items.Add(item);
}

// あとからColumnsを設定すると...
//for (int i = 0; i < 10; i++)
//{
//    var column = new ColumnHeader();
//    column.Text = "column";
//    listView.Columns.Add(column);
//}

listView.EndUpdate();
sw.Stop();
Debug.WriteLine(sw.ElapsedMilliseconds);

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。