好的,我有一个TListBox,有时可能会被要求显示43,000行!
我知道,这几乎没有任何意义,但确实如此.
现在这是当前的问题:
使用内置的Sort方法及其Compare回调函数几乎可以永久使用,就像很多分钟一样.
因此,我将列表框中的字符串从ShortStrintgs的普通旧动态数组中提取出来,对其执行QuickSort(),大约需要三秒钟.我想是啊!
做一点思考,我看到QuickSort正在移动所有这些字符串,这是不需要的,所以我将代码移动到指针或索引到字符串,瞧,排序再快一点,羚牛在一秒钟内排序43,000项.大赢,是吗?
但是,现在,如果我执行LB.Items.Add()或LB.Items.Assign将已排序的字符串移动到列表框中,则需要30秒!即使发生了BEgin/EndUpdate.如果我浏览代码,我会看到很多东西正在继续使用delete()Insert()INsertObject()和Windows消息没有任何理由.
片刻虽然揭示了我拥有LB.TStrings中的所有字符串,但我只需要将它们拖到我的QuickSorted()数组周围.这应该是微不足道的,只是移动一些指针.
但我没有看到任何可见的方法来设置原始TStringList指针.不,Exchange()真的很慢.
我有什么想法可以获得TString字符串指针?这应该是微不足道的,但我没有看到它.
谢谢,
乔治
所有这些消息实际上是飞来飞去的一个很好的理由.没有魔法"显示列表中的任何内容"功能.它必须获取列表的内容,从中构建一个树,一次一个项目,并显示该树的任何部分恰好落在可视控件的ClientRect中.你的外部字符串列表技术听起来像你将获得的最快的东西.
如果您想获得更好的性能,请尝试查看更快的列表框.我听说Virtual TreeView在添加大批新产品方面非常快,但我不能真正推荐它,因为我没有使用它并自己进行测试.但您可能需要查看一下,看看它是否比您现有的设置更适合您的需求.
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |