In Delphi Berlin 10.1, I have a for loop:
for i := 0 to slSMP.Count - 1 do
begin
if System.StrUtils.Containstext(slSMP.ValueFromIndex[i], ThisSearchTerm) or
System.StrUtils.Containstext(ExtractFileName(ExcludeTrailingPathDelimiter(slSMP.Names[i])), ThisSearchTerm) then
begin
slTempSearchList.Add(slSMP.Names[i] + slSMP.ValueFromIndex[i]);
end;
end;
slSMP and slTempSearchList obviously are of type TStringList.
Unfortunately, this loop takes too much time, so I decided to transform it into a OtlParallel.Parallel.For loop:
OtlParallel.Parallel.For(0, slSMP.Count - 1).Execute(
procedure (i: integer)
begin
if System.StrUtils.Containstext(slSMP.ValueFromIndex[i], ThisSearchTerm) or
System.StrUtils.Containstext(ExtractFileName(ExcludeTrailingPathDelimiter(slSMP.Names[i])), ThisSearchTerm) then
begin
slTempSearchList.Add(slSMP.Names[i] + slSMP.ValueFromIndex[i]);
//CodeSite.Send('TformSearchStartMenu.DoSearchFromSearchEdit: i', i);
end;
end);
STRANGELY, when the CodeSite.Send line is DEACTIVATED, this loop never finishes, so I had to close the application with the task manager.
But when the CodeSite.Send line is ACTIVATED, the loop finishes, but it takes LONGER than the simple for loop.
So how can I make this loop faster with parallel programming?
And why does the OtlParallel.Parallel.For only work when the CodeSite.Send line is ACTIVATED? How can I make it work without the CodeSite.Send line?