gpt4 book ai didi

c# - 交换 BindingList 元素需要很多时间,这是为什么,我应该怎么做?

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:52 24 4
gpt4 key购买 nike

我主要是为了好玩而编写小型 C# 应用程序,并且有一个 DataGridView 来显示一些数据,它绑定(bind)到 BindingList。从我决定让表格可排序的那一刻起,乐趣就开始了,这就是使用 BindingList 的原因。据我所知,在 BindingList 中没有这个的标准实现,但是 msdn 有一篇文章介绍了这个 ( about implementing sort and find for BindingList )。长话短说,在他们的实现中有几行会引起麻烦:

SomeClass tmp;
for(...)
{
tmp = this[i]; //fast
this[i] = this[position]; //slow
this[position] = tmp; //slow
}

如评论所示,第一个任务并没有花费太多时间,但其他两个任务真的很慢。我不明白其背后的原因,但由于它对列表 50 个左右的元素进行排序大约需要两秒钟。好吧,我可以使用一些解决方法,但它似乎有点难看。此外,我真的很想知道是什么导致了这种行为。

最佳答案

速度变慢是因为赋值会导致绑定(bind)到该列表的任何内容(例如,DataGridView)重绘。

您应该修改您的排序方法以禁止在更改列表时引发事件。

var origRaiseEvents = this.RaiseListChangedEvents;
this.RaiseListChangedEvents = false;
try
{
// here goes your original code.
}
finally
{
this.RaiseListChangedEvents = origRaiseEvents;
}

关于c# - 交换 BindingList<SomeClass> 元素需要很多时间,这是为什么,我应该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com