我有一个非数据绑定的DGV(没有数据源等;手动添加行)。为了过滤它,我一直在循环中进行检查,并适当地设置行的可见属性。这对于较小的测试装置来说效果很好,但在较大的测试装置的性能上完全失败。以5000 /秒过滤1k行。 10k行仅以〜250 /秒过滤。 50k只有40 /秒。我对发生的事情的假设是,每当我更改行可见性时,DGV都会重新生成显示行的列表,将过滤进程转换为O(n^2)操作。筛选没有数据绑定的DataGridView
尽管10k行表示用户滥用系统,行为不端的用户需要考虑,所以我需要做一些不同的事情。有没有更快的方法来筛选大量的行,而不使用数据绑定,或者我需要重新清除/重新创建所有行(对于合理数量的数据,这会显着变慢)?
//psuedocode. runs slowly if more than a few thousand rows. foreach (DataGridViewRow row in myDGV) { row.Visible = CalculateFilter(row); }
为什么行必须手动生成?如果这是一个深层次的架构问题,可能没有好的或快速的答案。 – Tom 2009-08-10 16:00:16
没有提供数据源的数据库。数据后端使用xml序列化将数据记录存储在“伪可识别”文件中,并将显示值(从多个文件组合而成)作为列表结构传递出来,每个结构包含单个DGV行的数据。 – 2009-08-10 16:06:43
感谢您指出。直到为时已晚,我可能都不会意识到这一点。 – 2014-01-29 13:52:43