我认为标题几乎抓住了我的问题,但后面有一些背景知识:
当我加载一个表单时,它会向绑定列表中添加几千个(30k个奇数)对象。当我的应用程序第一次加载它需要几秒钟(大约10秒左右的内存)时,它循环遍历对象列表并使用add函数将其添加到BindingSource。但是,当在后续表单上发生这种情况时,使用相同的代码加载它只需要一两秒钟。
所以我的疑问是:
1.为什么BindingList(Of T)没有AddRange成员?
2.使用AddRange函数,初始和后续添加是否会更快?
3.为什么一个版本的代码运行速度慢于相同版本的任何想法?
感谢您提供的任何帮助。
答案 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)
很久以后,我终于找到了DataGridView DefaultRowTemplate ContextMenuProperty的问题(不确定它是否是唯一的问题)。设置此项后,在向基础BindingSource添加项目时会增加相当长的时间。为了将来的参考,我使用&#34;有效地使用快捷菜单&#34;来遇到这个msdn.microsoft.com/en-us/library/ha5xt0d9.aspx。我很难学到这一课。
上述文章中的MSDN链接建议不要在每个单元格中使用快捷菜单,尤其是在模板中放入快捷菜单。相反,用户应为整个控件创建单个快捷菜单,或处理CellContextMenuStripNeeded或RowContextMenuStripNeeded事件。