ComboBox缓慢填充DataSource

时间:2016-03-14 00:01:36

标签: c# winforms performance combobox

.navigation.next{
  text-align: right;
}

这里将创建一个带按钮的窗口,并预先生成一个包含1548个随机整数的列表。

当您按下按钮36时,将创建ComboBoxes并使用预生成列表进行填充。它会挂一两秒钟。

public class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainWindow()); } } class MainWindow : Form { string[] list = new string[1548]; TableLayoutPanel panel = new TableLayoutPanel(); public MainWindow() : base() { Height = 2000; Width = 1000; Random rand = new Random(); for (int i = 0; i < 1548; i++) { list[i] = rand.Next().ToString(); } Button button = new Button(); button.Text = "Press me"; button.Click += Button_Click; panel.Controls.Add(button, 0, 0); panel.Height = 2000; panel.Width = 1000; Controls.Add(panel); Show(); } private void Button_Click(object sender, EventArgs e) { for (int i = 0; i < 36; i++) { ComboBox box = new ComboBox(); box.DataSource = list; panel.Controls.Add(box, 0, i+1); } } } 更改它,它会更慢。

如果您现在对第box.Items.AddRange(list);行进行评论,则速度会明显加快。

我不明白为什么将数据源绑定到box.DataSource = list;需要这么长时间。我猜这与绘制下拉菜单有关。

无论如何,我在我的程序中使用的comboBox都是一样的。它们显示相同的列表,但被绑定到不同的数据槽&#34; (它们使您能够选择库存项目 - 每个插槽的项目列表都相同,但选择的内容不是。)

有什么方法可以以某种方式强制程序只绘制一个ComboBox并将其用于所有36个? Od做类似的事情。似乎浪费资源让它做同样的事情36次......

它会加快程序的启动时间。

1 个答案:

答案 0 :(得分:0)

我不明白为什么将数据源绑定到comboBox会花这么长时间。我猜想这与绘制下拉菜单有关。

我不知道您是如何实现解决方案的,但这是不正常的。我首先向你暗示的是:

使用您要显示的组合框数量创建循环

for(x = 0; x < 36; x++)
{

}

初始化您的组合框并将其绑定,最后存储到数据结构中

//intialize combobox
ComboBox cmb = new ComboBox();

//populate with a Datasource

List<ComboBox> lstCmb = new List<ComboBox>();

for(x = 0; x < 36; x++)
{
    // store controller into an data strucuture
    lstCmb.Add(cmb);
}

将所有组合框预先填充并加载到该数据结构中后,您只需要使用36个组合框之一即可。