【问题标题】:Why doesn't BindingList(Of T) have AddRange Member?为什么 BindingList(Of T) 没有 AddRange 成员?
【发布时间】:2010-09-22 06:15:00
【问题描述】:

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

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

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

感谢您提供的任何帮助。

【问题讨论】:

  • 应用程序加载时是否正在加载表单?这可能是缓慢的原因吗?
  • 经过很长时间,我终于找到了 DataGridView DefaultRowTemplate ContextMenuProperty 的一个(不确定是否是唯一的)问题。设置后,当我将项目添加到底层 BindingSource 时,它​​会增加相当多的时间。
  • 为了将来参考,我使用“有效地使用快捷菜单”遇到了这个msdn.microsoft.com/en-us/library/ha5xt0d9.aspx。我已经吸取了教训。

标签: vb.net data-binding bindinglist


【解决方案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);
        }
    }

【讨论】:

    【解决方案2】:

    From the OP:

    经过很长时间,我终于找到了 DataGridView DefaultRowTemplate ContextMenuProperty 的一个(不确定是否是唯一的)问题。设置后,当我将项目添加到底层 BindingSource 时,它​​会增加相当多的时间。

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多