c# - ComboBox.Items.AddRange 性能

标签 c# performance combobox

我有一个 ComboBox,当我重新填充它时,这似乎是一项相当耗时的任务。在做了一些分析后,我发现大部分时间都花在了 ComboBox.Items.AddRange(Array) 方法上。我在下面包含了一个示例方法,它展示了我如何执行 ComboBox 的重新填充。

public void Repopulate(IList<MyType> sortedList)
{
    MyComboBox.BeginUpdate();

    try
    {
        MyComboBox.Items.Clear();
        MyComboBox.Items.AddRange(sortedList.ToArray());
    }
    finally
    {
        MyComboBox.EndUpdate();
    }
}

sortedList 包含大约 280 个项目,并且有多达 53 个需要重新填充的 ComboBox。因此,重新填充所有这些控件可能需要相当长的时间(在高规范机器上大约 700 毫秒,在低规范机器上大约 8000 毫秒),这对我的要求来说太慢了。我尝试将 sortedList 添加到新的 IList 中,这花费了大约 1 毫秒(在我的高规范机器上)。

我需要重新填充 ComboBox 以显着减少时间,理想情况下与 IList 的时间相似,但任何性能提升都会很好。到目前为止,我一直无法找到任何方法来提高重新填充的速度。

有人知道如何减少重新填充 ComboBox 所需的时间吗?

最佳答案

您的问题可能是您启用了组合框的 Sorted 属性。启用此功能并调用 AddRange 时,组合框会对所有这些项目进行排序,如果您的项目已经排序,则不需要这样做。

为了证明我的观点,我创建了两个组合框,它们使用 10,000 个排序的整数和 AddRange 填充。唯一的区别是一个组合框启用了 Sorted 属性,而另一个没有。以下是生成的 AddRange 调用的时间(以毫秒为单位)

notSortedCombo: 5ms
sortedCombo: 1140ms

这会是你的问题吗?你能有 53 个启用排序属性的组合框吗?

关于c# - ComboBox.Items.AddRange 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617551/

相关文章:

c# - 递归地使用泛型反射

python - 如何最佳地计算python列表中的元素

c# - 绘制有向无环图 : Minimizing edge crossing?

c# - WPF TPL 重新启动取消的任务

C# Exchange PowerShell pipeLine Invoke 正在为 null 参数值引发 CmdletInvocationException

ruby - 查看数组中的所有元素是否具有特定值的最快方法

performance - 寻找一种可靠的方法来测试移动设备上的 CSS 转换性能

.net - 组合框行为

c# - 使用 Entity Framework 保存组合框值时出现问题

wpf - C# - XAML 中的 WPF 反向绑定(bind) ObservableCollection