为什么BindingList(Of T)没有AddRange成员?

时间:2010-09-22 06:15:00

标签: vb.net data-binding bindinglist

我认为标题几乎抓住了我的问题,但后面有一些背景知识:

当我加载一个表单时,它会向绑定列表中添加几千个(30k个奇数)对象。当我的应用程序第一次加载它需要几秒钟(大约10秒左右的内存)时,它循环遍历对象列表并使用add函数将其添加到BindingSource。但是,当在后续表单上发生这种情况时,使用相同的代码加载它只需要一两秒钟。

所以我的疑问是:
1.为什么BindingList(Of T)没有AddRange成员?
2.使用AddRange函数,初始和后续添加是否会更快? 3.为什么一个版本的代码运行速度慢于相同版本的任何想法?

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

我不确定为什么没有AddRange方法可用。您可以轻松编写自己的扩展方法:

    /// <summary>
    /// Adds all the data to a binding list
    /// </summary>
    public static void AddRange<T>(this BindingList<T> list, IEnumerable<T> data)
    {
        if (list == null || data == null)
        {
            return;
        }

        foreach (T t in data)
        {
            list.Add(t);
        }
    }

答案 1 :(得分:0)

From the OP

  很久以后,我终于找到了DataGridView DefaultRowTemplate ContextMenuProperty的问题(​​不确定它是否是唯一的问题)。设置此项后,在向基础BindingSource添加项目时会增加相当长的时间。

     

为了将来的参考,我使用&#34;有效地使用快捷菜单&#34;来遇到这个msdn.microsoft.com/en-us/library/ha5xt0d9.aspx。我很难学到这一课。

上述文章中的MSDN链接建议不要在每个单元格中使用快捷菜单,尤其是在模板中放入快捷菜单。相反,用户应为整个控件创建单个快捷菜单,或处理CellContextMenuStripNeededRowContextMenuStripNeeded事件。