【发布时间】:2016-06-28 21:34:03
【问题描述】:
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);
}
}
}
这里将创建一个带有按钮的窗口,并将预先生成一个包含 1548 个随机整数的列表。
当您按下按钮时,将创建 36 个组合框并使用预生成的列表进行填充。它会挂起一两秒钟。
换成box.Items.AddRange(list);会更慢。
如果您现在评论行box.DataSource = list;,它会明显更快。
我不明白为什么将数据源绑定到comboBox 需要这么长时间。我猜这与绘制下拉菜单有关。
不管怎样,我在程序中使用的comboBoxes 都是一样的。它们显示相同的列表,但绑定到不同的“数据槽”(它们使您能够选择库存物品 - 每个槽的物品列表都相同,但选择的内容不同)。
有什么方法可以强制程序仅绘制一个 ComboBox 并将其用于所有 36 个? Od 做类似的事情。让它做同样的事情 36 次似乎是在浪费资源......
这会加快程序的启动时间。
【问题讨论】:
标签: c# winforms performance combobox