『BeginUpdate』を使えば『AddRange』を使用した場合と処理速度は変わらない - C#

ListBoxやComboBoxにアイテムを追加する場合、追加する値を配列で持っているなら『AddRange』を使えば1発で済むのだが、そうでない場合もある。

『AddRange』に比べ『Add』メソッドを使用すると処理に時間が掛かってしまうような気になるが、処理速度にどれ程の差があるのか、実際に調べてみた。

『Add』メソッドを使用する場合、再描画に時間が掛かること、コントロールがチラつくことを回避するために『BeginUpdate,EndUpdate』を使用するものとする。

前設定として『ListBoxに文字列(Item)を追加する処理』のみを計測するため、ListBoxに追加する文字列は予め配列に持っているものとしている。

配列の要素数は100000(10万)。

AddRangeメソッドを使用した処理

lst.Items.AddRange(sArr);


Addメソッドを使用した処理
lst.BeginUpdate();
for (int i = 0 ; i < sArr.GetLength(0) ; i++)
{
    lst.Items.Add(sArr[i]);
}
lst.EndUpdate();

上記の処理を100回繰り返し、平均値を求めた。


結果:
  • 『AddRange』を使用した場合 = 753ms
  • 『Add』を使用した場合 = 756ms

3msという差は誤差の範囲と捉えられるだろう。

この結果から『BeginUpdate,EndUpdate』を使用すれば『AddRange』と『Add』は処理速度に差はない

『AddRange』の優位性は可読性のみか。

0 Comments:

Sony Style(ソニースタイル)
デル株式会社

Recent Posts