2

我在允许用户输入项目列表的表单上有一个 TMemo。人们可以在这里输入许多项目。当他们单击保存时,TMemo 的内容被选中,然后添加到数据库中。

我在 TStringList 中有第二个列表,我循环并检查它的任何项目是否包含在 TMemo 中。

简而言之,它看起来像这样

....
//slItems = TStringList
//mItems = TMemo
for i := slItems.Count -1 downto 0 do
begin
  if mItems.Lines.IndexOf(slItems[i]) = -1 then
    slItems[i].Delete;
end;
----

所以 stringlist 循环,检查它是否存在于备忘录中,如果不从列表中删除。

然而,当有 200 多个项目时,速度开始下降很多,而 1000 则变得非常糟糕。

搜索 TMemo 最快的方法是什么?

4

1 回答 1

7

将所有内容读TMemo入本地TStringList并从中工作。每次访问时TMemo.Lines,您都依赖 Windows 消息与 Windows 提供的多行文本框对话。什么都没有效率!

....
//slItems = TStringList
//mItems = TMemo
//L = TStringList
L.Text := mItems.Text; // edited per David's suggestion.
L.Sorted := True; // per Uwe Raabe's suggestion.
for i := slItems.Count -1 downto 0 do
begin
  if L.IndexOf(slItems[i]) = -1 then
    slItems[i].Delete;
end;
----
于 2011-04-11T12:42:45.903 回答