首页 文章

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

提问于
浏览
7

我认为 Headers 几乎 grab 了我的问题,但是后面有一点背景:

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

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

感谢您提供的任何帮助 .

2 回答

  • 0

    我不确定为什么没有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

    From the OP

    经过很长一段时间后,我终于向DataGridView DefaultRowTemplate ContextMenuProperty追踪了一个(不确定是否是唯一的)问题 . 设置此项后,在向基础BindingSource添加项目时会增加相当长的时间 . 为了将来的参考,我使用“有效地使用快捷菜单”遇到了这个msdn.microsoft.com/en-us/library/ha5xt0d9.aspx . 我很难学到这一课 .

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

相关问题