我在表单上有一个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的最快方法是什么?
答案 0 :(得分: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;
----