开发者

Fast way to search lines of Tmemo

开发者 https://www.devze.com 2023-02-23 23:57 出处:网络
I have a TMemo on a form which allows users to enter a list of items. People can enter many items here. When they click Save the contents of the TMemo is checked and then added to the database.

I have a TMemo on a form which allows users to enter a list of items. People can enter many items here. When they click Save the contents of the TMemo is checked and then added to the database.

I have a second list in a TStringList which I loop over and check to see if any of it's items are contained in the TMemo.

In a nut shell it looks like this

....
//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;
----

So stringlist looped, check to see if it exists in memo, if not delete from list.

However, with 200+ items this is starting to slow down a lot, and with 1000 it开发者_StackOverflow社区 gets real bad.

Whats the fastest way to search a TMemo?


Read all of TMemo into a local TStringList and work from that. Every time you're accessing TMemo.Lines you're relying on Windows messaging to talk to the windows-provided multi line text box. Anything but efficient!

....
//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;
----
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号