好的,我有一个 TListBox,有时可能会被要求显示 43,000 行!
我知道,这几乎没有任何意义,但确实如此。
现在这是当前的问题:
使用内置的 Sort 方法和它的 Compare 回调函数,几乎需要很长时间,比如几分钟。
因此,我将列表框中的字符串提取到一个普通的、旧的 ShortStrings 动态数组中,对其执行 QuickSort(),这大约需要三秒钟。哇,我想!
稍微思考了一下,我看到 QuickSort 正在移动所有这些字符串,这是没有必要的,所以我可以让代码只移动指针或索引到字符串,瞧,排序又快了很多,花费不到一秒钟的时间对 43,000 件物品进行分类。大获全胜,是吗?
但是,现在如果我执行 LB.Items.Add() 或 LB.Items.Assign 将排序后的字符串移动到列表框中,则需要 30 秒!即使发生 BEgin/EndUpdate。如果我跟踪代码,我会看到 delete() Insert() INsertObject() 和 Windows 消息无缘无故飞来飞去。
片刻之后显示我在 LB.TStrings 中拥有所有字符串,我只需要在我的 QuickSorted() 数组周围随机排列它们。这应该是微不足道的,只是移动一些指针。
但我看不到任何设置原始 TStringList 指针的可见方法。不, Exchange() 真的很慢。
有什么想法可以获取 TString 字符串指针吗?这应该是微不足道的,但我没有看到。
谢谢,
乔治