在Delphi Berlin 10.1中,我有一个for
循环:
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 和 slTempSearchList 显然属于TStringList
类型。
不幸的是,这个循环花费了太多时间,所以我决定将它转换为OtlParallel.Parallel.For
循环:
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);
明显地,当CodeSite.Send
行被停用时,此循环永远不会完成,因此我必须使用任务管理器关闭应用程序。
但是当CodeSite.Send
行被激活时,循环结束,但它比简单的for
循环需要更长的时间。
那么如何通过并行编程更快地完成这个循环呢?
为什么OtlParallel.Parallel.For
仅在CodeSite.Send
行被激活时才有效?如何在没有CodeSite.Send
行的情况下使其工作?