【发布时间】:2010-11-18 08:13:18
【问题描述】:
我有一个非数据绑定 DGV(没有数据源等;手动添加的行)。为了过滤它,我一直在循环检查并适当地设置行可见属性。这在较小的测试集上效果很好,但在较大的测试集上表现完全失败。 1k 行以 5000/秒过滤。 10k 行仅以 ~250/秒过滤。 50k 仅需 40/秒。我对正在发生的事情的假设是,每次我更改行可见性时,DGV 都会重建一个显示行列表,将过滤过程变成 O(n^2) 操作。
即使有 10k 行表明用户正在滥用系统;需要考虑行为不良的用户,所以我需要做一些不同的事情。有没有比我现在在不使用数据绑定的情况下更快地过滤大量行的方法,还是我需要依靠清除/重新创建所有行(对于合理数量的数据,这要慢得多)?
//伪代码。如果超过几千行,则运行缓慢。 foreach(myDGV 中的 DataGridViewRow 行) { row.Visible = CalculateFilter(row); }【问题讨论】:
-
为什么必须手动生成行?如果这是一个深层次的架构问题,可能没有好的或快速的答案。
-
没有提供数据源的数据库。数据后端使用 xml 序列化将数据记录存储在“伪表”文件中,并将显示值(来自多个文件的组合)作为结构的 List 传递出去,每个结构都包含单个 DGV 行的数据。
-
感谢您指出。我可能不会意识到这一点,直到为时已晚。
标签: c# datagridview filter