我的 WinForms UI 包含一个带有两个标签页的标签控件。在一个选项卡上,我需要以允许我的用户在列表中添加、编辑和删除字符串的方式显示最多 100,000 个字符串的列表。在第二个选项卡上,我需要显示第一个选项卡中字符串的“只读”副本。我还需要第二个选项卡上的控件,允许用户将字符串从“只读”列表复制到第二个不相关列表中。
我目前在一个数组中有 100k 个字符串,我的第一个想法是使用列表框来显示它们。我可以遍历数组并将字符串单独添加到第一个选项卡上的列表框中。如果我使用 SuspendLayout() 和 BeginUpdate(),则显示大约需要 1.5 秒。不幸的是,当我向列表框添加超过 65k 项时,会出现垂直滚动条问题(显然这是在 Vista 期间引入的列表框控件中的一个错误)。由于字符串数据未绑定到列表框,因此我基本上将相同的整个数据集添加到第二个选项卡上的另一个列表框。现在,如果我启动我的应用程序,等待将字符串添加到列表框,然后尝试选择第二个选项卡,等待第二个选项卡响应时性能非常慢。我' m 假设这与列表框中的数据量有关。无论如何,一旦第二个选项卡响应,我可以在两个选项卡页面之间切换,延迟要少得多。
作为测试,我尝试将两个列表框绑定到数组,但从性能的角度来看它没有任何区别。无论如何,滚动错误可能会使列表框成为我无法使用的选项。因此,我在列表模式下尝试了带有单个隐藏列标题的 listview 控件。当我将字符串数据添加为单独的 ListViewItems 时,性能并没有太大的不同。我打算尝试将两个 listview 控件绑定到我的数组,但看起来 listview 控件不支持设计时数据绑定,我不确定如果我自己尝试实现它会产生很大的不同。
我知道 100,000 个字符串(最大)对于用户来说是很多数据要处理,但要求用户能够看到应用程序中的所有字符串数据(最坏的情况是我的 QA 团队首先会开始测试!)。是否有另一种控件可以适应这种数据量和我需要的功能?还是我只是把这一切都错了?