10

我认为标题几乎抓住了我的问题,但有一点背景:

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

所以我的查询是:
1. 为什么 BindingList(Of T) 没有 AddRange 成员?
2. 使用 AddRange 函数会更快地进行初始和后续添加吗?
3. 任何想法为什么一个版本的代码比相同版本运行得慢?

感谢您提供的任何帮助。

4

2 回答 2

3

我不确定为什么没有可用的 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);
        }
    }
于 2015-11-10T15:18:50.557 回答
0

来自 OP

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

为了将来参考,我使用“有效地使用快捷菜单”遇到了这个msdn.microsoft.com/en-us/library/ha5xt0d9.aspx 。我已经以艰难的方式吸取了这一教训。

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

于 2013-09-17T19:43:48.470 回答