Vb.net 为什么';t BindingList(共t个)是否有AddRange成员?

Vb.net 为什么';t BindingList(共t个)是否有AddRange成员?,vb.net,data-binding,bindinglist,Vb.net,Data Binding,Bindinglist,我认为这个标题很好地抓住了我的问题,但有一点背景如下: 当我加载一个表单时,它会向一个绑定列表中添加几千个(30k多个)对象。当我的应用程序第一次加载时,需要几秒钟(从内存中大约10秒钟)才能循环遍历对象列表,并使用add函数将其添加到BindingSource。但是,如果在具有相同代码的后续表单上发生这种情况,则只需一两秒钟 所以我的问题是: 1.为什么BindingList(Of t)没有AddRange成员? 2.使用AddRange函数,初始和后续添加是否会更快? 3.知道为什么一个版本

我认为这个标题很好地抓住了我的问题,但有一点背景如下:

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

所以我的问题是:
1.为什么BindingList(Of t)没有AddRange成员?
2.使用AddRange函数,初始和后续添加是否会更快?
3.知道为什么一个版本的代码比相同版本的代码运行得慢吗?

感谢您可能提供的任何帮助。

:


经过很多时间,我终于找到了DataGridView DefaultRowTemplate ContextMenuProperty的一个问题(不确定这是否是唯一的问题)。设置此选项后,当我向基础BindingSource添加项时,会增加相当多的时间


作为将来的参考,我在使用“高效使用快捷菜单”时遇到了这个问题。这一课我学到了很多


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

我不确定为什么没有可用的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);
        }
    }
//
///将所有数据添加到绑定列表中
/// 
公共静态void AddRange(此BindingList列表,IEnumerable数据)
{
如果(列表==null | |数据==null)
{
返回;
}
foreach(数据中的T)
{
列表。添加(t);
}
}

加载应用程序时是否正在加载表单?这可能是缓慢的原因吗?经过很多时间,我终于找到了DataGridView DefaultRowTemplate ContextMenuProperty的一个问题(不确定这是否是唯一的问题)。设置此选项后,当我将项目添加到基础BindingSource时,会增加相当多的时间。这一课我学到了很多。