C# 開発

【C# ListBox】アイテム追加を高速に行う

準備

(なし)

デザイン

  • フォーム (Form1) にボタン (button1) を配置します。
  • フォーム (Form1) にリストボックス (listBox1) を配置します。

サンプルコード (C#)

using System.Diagnostics;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ListBoxAdd();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.BeginUpdate();

            ListBoxAdd();

            listBox1.EndUpdate();
        }

        private void ListBoxAdd()
        {
            var sw = new Stopwatch();
            sw.Start();

            foreach (var idx in Enumerable.Range(1, 50000))
            {
                listBox1.Items.Add(idx.ToString());
            }

            sw.Stop();
            listBox1.Items.Add(sw.Elapsed.ToString());
        }
    }
}

解説

BeginUpdate で、リストボックスの表示を一時停止します。そして、すべてのアイテムの追加が終了した段階で、EndUpdate により、一気に表示します。 BeginUpdate ~ EndUpdate を行うと、スピードが劇的に速くなります。

BeginUpdate なしでは 16 秒、ありでは 6 秒という結果になった。

結果

動作確認環境

Visual Studio 2022 Professional (.NET8 C#12)

ログ

初版:2016.05.16 Visual Studio 2015 Professional (C# 6.0)

-C# 開発